日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java實現多線程的上下文切換

瀏覽:15日期:2022-08-23 14:17:50

對于上下文切換不同的操作系統模式也不盡相同,這里我們只討論Unix系統,在我之前的文章中提到過windows的搶占式,這里就不在贅述。

無論是單核還是多核CPU都是支持多線程代碼的,CPU通過給每個線程分配CPU時間片來實這個機制。

時間片是CPU分配給各個線程的時間,因為時間片非常短,所以CPU通過不停地切換線程執(zhí)行,讓我們感覺多個線程是同時執(zhí)行的,時間片一般是幾十毫秒(ms)

CPU通過時間片分配算法來循環(huán)執(zhí)行任務,當前任務執(zhí)行一個時間片后會切換到下一個任務。但是,在切換前會保存上一個任務的狀態(tài),以便下次切換回這個任務時,可以再加載這個任務的狀態(tài)。

所以任務從保存到再加載的過程就是一次上下文切換。 很明顯上下文切換會影響多線程的執(zhí)行速度。

如何減少上下文切換

減少上下文切換的方法有

1、無鎖并發(fā)編程。

多線程競爭鎖時,會引起上下文切換,所以多線程處理數據時,可以用一

些辦法來避免使用鎖,如將數據的ID按照Hash算法取模分段,不同的線程處理不同段的數據。

2、CAS算法。

Java的Atomic包使用CAS(compare and swap)算法來更新數據,而不需要加鎖。

3、使用最少線程。避免創(chuàng)建不需要的線程,比如任務很少,但是創(chuàng)建了很多線程來處理,這

樣會造成大量線程都處于等待狀態(tài)。

4、協程:在單線程里實現多任務的調度,并在單線程里維持多個任務間的切換。

減少上下文切換的例子

下面我們看一個通過減少線上大量WAITING的線程,來減少上下文切換次數的例子:

使用jstack命令dump線程信息,看看pid為3117的進程里的線程都在做什么

sudo -u admin /opt/java/bin/jstack 31177 > /home/java/dump17

統計所有線程分別處于什么狀態(tài),發(fā)現300多個線程處于WAITING(onobjectmonitor)狀態(tài)

grep java.lang.Thread.State dump17 | awk ’{print $2$3$4$5}’| sort | uniq -c39 RUNNABLE21 TIMED_WAITING(onobjectmonitor)6 TIMED_WAITING(parking)51 TIMED_WAITING(sleeping)305 WAITING(onobjectmonitor)3 WAITING(parking)

打開dump文件查看處于WAITING(onobjectmonitor)的線程在做什么。發(fā)現這些線程基本全是JBOSS的工作線程,在await。說明JBOSS線程池里線程接收到的任務太少,大量線程都閑著。

'http-0.0.0.0-7001-97' daemon prio=10 tid=0x000000004f6a8000 nid=0x555e inObject.wait() [0x0000000052423000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000007969b2280> (a org.apache.tomcat.util.net.AprEndpoint$Worker)at java.lang.Object.wait(Object.java:485)at org.apache.tomcat.util.net.AprEndpoint$Worker.await(AprEndpoint.java:1464)- locked <0x00000007969b2280> (a org.apache.tomcat.util.net.AprEndpoint$Worker)at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1489)at java.lang.Thread.run(Thread.java:662)

減少JBOSS的工作線程數,找到JBOSS的線程池配置信息,將maxThreads降到100

<maxThreads='250' maxHttpHeaderSize='8192'emptySessionPath='false' minSpareThreads='40' maxSpareThreads='75'maxPostSize='512000' protocol='HTTP/1.1'enableLookups='false' redirectPort='8443' acceptCount='200' bufferSize='16384'connectionTimeout='15000' disableUploadTimeout='false' useBodyEncodingForURI= 'true'>

重啟JBOSS,再dump線程信息,然后統計WAITING(onobjectmonitor)的線程,發(fā)現減少了175個。

WAITING的線程少了,系統上下文切換的次數就會少,因為每一次從WAITTING到RUNNABLE都會進行一次上下文的切換。

讀者也可以使用vmstat命令測試一下。

grep java.lang.Thread.State dump17 | awk ’{print $2$3$4$5}’| sort | uniq -c44 RUNNABLE22 TIMED_WAITING(onobjectmonitor)9 TIMED_WAITING(parking)36 TIMED_WAITING(sleeping)130 WAITING(onobjectmonitor)1 WAITING(parking)

為什么要減少上下文切換

當CPU從執(zhí)行一個線程切換到執(zhí)行另外一個線程的時候,它需要先存儲當前線程的本地的數據,程序指針等,然后載入另一個線程的本地數據,程序指針等,最后才開始執(zhí)行。

這種切換稱為“上下文切換”(“context switch”)。

CPU會在一個上下文中執(zhí)行一個線程,然后切換到另外一個上下文中執(zhí)行另外一個線程。上下文切換并不廉價,是比較耗時的

以上這篇Java實現多線程的上下文切換就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产乱码久久久久久1区2匹| 欧美国产日本| 国产亚洲一区| 久久精品天堂| 日韩伦理福利| 影院欧美亚洲| 日本久久一区| 日本一二区不卡| 欧美不卡视频| 日韩高清一区| 国产精品成人一区二区不卡| 久久天堂成人| 日韩欧美中文字幕电影 | 久久国产精品毛片| 狠狠爱成人网| 国产探花一区| 韩国久久久久久| 久久香蕉国产| 中文字幕一区日韩精品| 国产精品日本一区二区三区在线 | 欧美专区18| 欧美亚洲专区| 日韩成人综合| 少妇精品久久久一区二区| 国产精品magnet| 日韩高清欧美| 蜜桃久久av一区| 精品国产精品国产偷麻豆| 国产黄大片在线观看| 国产精品丝袜xxxxxxx| 国产精品一区二区三区www| 欧美羞羞视频| 日韩欧美中文字幕在线视频| av中文资源在线资源免费观看| 婷婷综合电影| 成人在线视频免费| 亚洲精品成人一区| 成人欧美一区二区三区的电影| 日韩av网站在线观看| 精品三级国产| 欧美午夜不卡| 国产乱码精品一区二区三区亚洲人| 丝袜诱惑制服诱惑色一区在线观看 | 中文字幕一区二区精品区| 国产精品白丝一区二区三区| 不卡中文字幕| 国产91欧美| 亚洲欧洲日韩精品在线| 亚洲成人一区在线观看| 国产一卡不卡| 免费不卡在线观看| 亚洲h色精品| 麻豆视频一区二区| 蜜桃久久久久久| 久久精品国产99久久| 美腿丝袜在线亚洲一区| 一二三区精品| 91久久亚洲| 波多野结衣久久精品| 日本欧美一区二区| 亚洲在线国产日韩欧美| 免费福利视频一区二区三区| 国产精品久久久久久妇女| 亚洲伊人影院| 亚洲少妇一区| 激情婷婷欧美| 久久久精品日韩| 精品视频久久| 日韩亚洲精品在线观看| 亚洲一区国产一区| 伊人精品一区| 亚洲成人国产| 日本久久成人网| 精品视频网站| 国产精品啊啊啊| 婷婷视频一区二区三区| 老鸭窝毛片一区二区三区| 欧美大黑bbbbbbbbb在线| 桃色av一区二区| 欧美激情aⅴ一区二区三区| 91精品国产自产精品男人的天堂| 日本亚洲欧美天堂免费| 欧美午夜不卡| 国产suv精品一区二区四区视频| 国产黄大片在线观看| 国产精区一区二区| 日韩精品亚洲一区二区三区免费| 国产一区导航| 国产一区久久| 欧美~级网站不卡| 日韩午夜av| 蜜桃视频免费观看一区| 亚洲精品日韩久久| 日韩一区二区三区四区五区| 99视频一区| 亚洲一区二区免费看| 中文欧美日韩| 亚洲精一区二区三区| 中文字幕一区二区av| 日本欧美韩国一区三区| 欧美精品91| 91偷拍一区二区三区精品| 成人国产精品久久| 亚洲www啪成人一区二区| 欧美日韩中文一区二区| 日韩视频一区| 亚洲最新av| 免费一级欧美片在线观看网站| 欧美高清一区| 欧美日韩免费观看一区=区三区| 日韩中文av| 亚洲人成亚洲精品| 日本aⅴ精品一区二区三区| 欧美日韩一区二区国产| 国产精品黄网站| 高清在线一区| 亚洲va在线| 中文字幕一区二区三区在线视频| 久久精品国产福利| 精品国产亚洲日本| 欧美日韩色图| 日韩中文字幕一区二区高清99| 亚洲播播91| 午夜欧美视频| 国产香蕉精品| 日本不良网站在线观看| 欧美~级网站不卡| 日韩黄色av| 欧美xxxx中国| 欧美日韩第一| 日本精品一区二区三区在线观看视频| 九色porny丨国产首页在线| 亚洲成人va| 婷婷成人av| se01亚洲视频 | 国产成人77亚洲精品www| 神马日本精品| 日韩av一二三| 蜜桃精品在线| 日韩动漫一区| 四虎4545www国产精品 | 蜜桃视频一区二区三区在线观看| 大香伊人久久精品一区二区| 久久麻豆精品| 欧美日韩亚洲一区二区三区在线| 好看不卡的中文字幕| 91欧美精品| 日韩av片子| 亚久久调教视频| 99精品在线观看| 国产精品亚洲成在人线| 亚洲免费激情| 黄色在线观看www| 亚洲一区二区av| 亚洲1234区| 久久国产婷婷国产香蕉| 国产一区日韩一区| 国产精品免费精品自在线观看| 欧洲激情综合| 久久99久久人婷婷精品综合| 蜜桃传媒麻豆第一区在线观看| 91精品电影| 国产精品日本一区二区不卡视频| 日韩精品免费观看视频| 欧美不卡高清一区二区三区| 日本高清久久| 欧美日韩精品一本二本三本 | 国产美女视频一区二区| 黄色aa久久| 日本不卡视频在线| 国产二区精品| 成人福利视频| 国产精选久久| 日韩专区欧美专区| 国产白浆在线免费观看| 国产精品久久久久久久久久妞妞| 国产精品分类| 国产精品日韩久久久| 黄色在线网站噜噜噜| 人人爱人人干婷婷丁香亚洲| 亚洲欧美久久| 午夜欧美理论片| 久久免费大视频| 韩国三级一区| 日本黄色精品| 国产精品久久久久久久久久白浆| 国产免费av国片精品草莓男男| 日韩精品久久理论片| 亚洲福利一区| 你懂的亚洲视频| 国产精品一站二站| 清纯唯美亚洲综合一区| 99在线观看免费视频精品观看| 日本成人在线一区| 欧美资源在线| 免费黄网站欧美| 日韩中文字幕区一区有砖一区| 国产美女久久| 日韩影片在线观看| 亚洲精品国产日韩|