Java的JVM虛擬機線程調度和進程調度方式

0.一個單核CPU如何執(zhí)行多線程?原理旬蟋?

(1)單核cpu同一時間倾贰,cpu只能處理1個線程,只有1個線程在執(zhí)行安寺;
(2)多線程同時執(zhí)行首尼,是cpu快速的在多個線程之間的切換软能;
(3)cpu調度線程的時間足夠快,就造成了多線程的“同時”執(zhí)行凳枝;
(4)如果線程數非常多跋核,cpu會在多個線程之間切換岖瑰,也會消耗大量的cpu資源蹋订;
(5)如果線程數非常多,每個線程被調度的次數會降低难礼,線程的執(zhí)行效率也會降低玫锋。

單核CPU執(zhí)行多線程原理:宏觀并行撩鹿,微觀串行。

1. Java線程調度的方式

1.1 搶占式調度

搶占式調度指的是每條線程執(zhí)行的時間键思、線程的切換都由系統(tǒng)控制甫贯。
系統(tǒng)控制指的是在系統(tǒng)某種運行機制下叫搁,可能每條線程都分同樣的執(zhí)行時間片,也可能是某些線程執(zhí)行的時間片較長疾党,甚至某些線程得不到執(zhí)行的時間片惨奕。在這種機制下梨撞,一個線程的堵塞不會導致整個進程堵塞。

1.2 協同式調度

協同式調度指某一線程執(zhí)行完后主動通知系統(tǒng)切換到另一線程上執(zhí)行聋袋。
這種模式就像接力賽一樣幽勒,一個人跑完自己的路程就把接力棒交接給下一個人,下個人繼續(xù)往下跑锈颗。線程的執(zhí)行時間由線程本身控制,線程切換可以預知淋淀,不存在多線程同步問題覆醇,但它有一個致命弱點:如果一個線程編寫有問題永脓,運行到一半就一直堵塞,那么可能導致整個系統(tǒng)崩潰搅吁。

Java中JVM線程調度

2. JVM線程調度實現(搶占式)

Java 使用的線程調使用搶占式調度谎懦,Java 中線程會按優(yōu)先級分配 CPU 時間片運行,且優(yōu)先級越高越優(yōu)先執(zhí)行溃斋,但優(yōu)先級高并不代表能獨自占用執(zhí)行時間片界拦,可能是優(yōu)先級高得到越多的執(zhí)行時間片,反之盐类,優(yōu)先級低的分到的執(zhí)行時間少但不會分配不到執(zhí)行時間寞奸。

線程讓出 cpu 的情況:

  1. 當前運行線程主動放棄 CPU,JVM 暫時放棄 CPU 操作(基于時間片輪轉調度的 JVM 操作系統(tǒng)不會讓線程永久放棄 CPU在跳,或者說放棄本次時間片的執(zhí)行權),例如調用 yield()方法隐岛。
  2. 當前運行線程因為某些原因進入阻塞狀態(tài)猫妙,例如阻塞在 I/O 上。
  3. 當前運行線程結束聚凹,即運行完 run()方法里面的任務。

3. 進程調度算法

3.1 優(yōu)先調度算法

  1. 先來先服務調度算法(FCFS)
    當在作業(yè)調度中采用該算法時妒牙,每次調度都是從后備作業(yè)隊列中選擇一個或多個最先進入該隊列的作業(yè)彼哼,將它們調入內存,為它們分配資源湘今、創(chuàng)建進程敢朱,然后放入就緒隊列。在進程調度中采用 FCFS 算法時,則每次調度是從就緒隊列中選擇一個最先進入該隊列的進程拴签,為之分配處理機孝常,使之投入運行。該進程一直運行到完成或發(fā)生某事件而阻塞后才放棄處理機蚓哩,特點是:算法比較簡單构灸,可以實現基本上的公平
  2. 短作業(yè)(進程)優(yōu)先調度算法(SPF)
    短作業(yè)優(yōu)先(SJF)的調度算法是從后備隊列中選擇一個或若干個估計運行時間最短的作業(yè)岸梨,將它們調入內存運行喜颁。而短進程優(yōu)先(SPF)調度算法則是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它曹阔,使它立即執(zhí)行并一直執(zhí)行到完成洛巢,或發(fā)生某事件而被阻塞放棄處理機時再重新調度。該算法未照顧緊迫型作業(yè)次兆。

3.2 高優(yōu)先權優(yōu)先調度算法

為了照顧緊迫型作業(yè)稿茉,使之在進入系統(tǒng)后便獲得優(yōu)先處理,引入了最高優(yōu)先權優(yōu)先(FPF)調度算法芥炭。當把該算法用于作業(yè)調度時漓库,系統(tǒng)將從后備隊列中選擇若干個優(yōu)先權最高的作業(yè)裝入內存。
當用于進程調度時园蝠,該算法是把處理機分配給就緒隊列中優(yōu)先權最高的進程渺蒿。

  1. 非搶占式優(yōu)先權算法
    在這種方式下,系統(tǒng)一旦把處理機分配給就緒隊列中優(yōu)先權最高的進程后彪薛,該進程便一直執(zhí)行下去茂装,直至完成;或因發(fā)生某事件使該進程放棄處理機時善延。這種調度算法主要用于批處理系統(tǒng)中少态;也可用于某些對實時性要求不嚴的實時系統(tǒng)中。
  2. 搶占式優(yōu)先權調度算法
    在這種方式下易遣,系統(tǒng)同樣是把處理機分配給優(yōu)先權最高的進程彼妻,使之執(zhí)行。但在其執(zhí)行期間豆茫,只要又出現了另一個其優(yōu)先權更高的進程侨歉,進程調度程序就立即停止當前進程(原優(yōu)先權最高的進程)的執(zhí)行,重新將處理機分配給新到的優(yōu)先權最高的進程揩魂。顯然幽邓,這種搶占式的優(yōu)先權調度算法能更好地滿足緊迫作業(yè)的要求,故而常用于要求比較嚴格的實時系統(tǒng)中火脉,以及對性能要求較高的批處理和分時系統(tǒng)中牵舵。

3.3 基于時間片的輪轉調度算法

  1. 時間片輪轉法
    在早期的時間片輪轉法中柒啤,系統(tǒng)將所有的就緒進程按先來先服務的原則排成一個隊列,每次調度時棋枕,把 CPU 分配給隊首進程白修,并令其執(zhí)行一個時間片。時間片的大小從幾 ms 到幾百 ms重斑。當執(zhí)行的時間片用完時兵睛,由一個計時器發(fā)出時鐘中斷請求,調度程序便據此信號來停止該進程的執(zhí)行窥浪,并將它送往就緒隊列的末尾祖很;然后,再把處理機分配給就緒隊列中新的隊首進程漾脂,同時也讓它執(zhí)行一個時間片假颇。這樣就可以保證就緒隊列中的所有進程在一給定的時間內均能獲得一時間片的處理機執(zhí)行時間。
  2. 多級反饋隊列調度算法
    (1) 應設置多個就緒隊列骨稿,并為各個隊列賦予不同的優(yōu)先級笨鸡。第一個隊列的優(yōu)先級最高,第二個隊列次之坦冠,其余各隊列的優(yōu)先權逐個降低形耗。該算法賦予各個隊列中進程執(zhí)行時間片的大小也各不相同,在優(yōu)先權愈高的隊列中辙浑,為每個進程所規(guī)定的執(zhí)行時間片就愈小激涤。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍判呕,……倦踢,第 i+1 個隊列的時間片要比第 i 個隊列的時間片長一倍。
    (2) 當一個新進程進入內存后侠草,首先將它放入第一隊列的末尾辱挥,按 FCFS 原則排隊等待調度。當輪到該進程執(zhí)行時梦抢,如它能在該時間片內完成般贼,便可準備撤離系統(tǒng);如果它在一個時間片結束時尚未完成奥吩,調度程序便將該進程轉入第二隊列的末尾,再同樣地按 FCFS 原則等待調度執(zhí)行蕊梧;如果它在第二隊列中運行一個時間片后仍未完成霞赫,再依次將它放入第三隊列,……肥矢,如此下去端衰,當一個長作業(yè)(進程)從第一隊列依次降到第 n 隊列后叠洗,在第 n 隊列便采取按時間片輪轉的方式運行。
    (3) 僅當第一隊列空閑時旅东,調度程序才調度第二隊列中的進程運行灭抑;僅當第 1~(i-1)隊列均空時,才會調度第 i 隊列中的進程運行抵代。如果處理機正在第 i 隊列中為某進程服務時腾节,又有新進程進入優(yōu)先權較高的隊列(第 1~(i-1)中的任何一個隊列),則此時新進程將搶占正在運行進程的處理機荤牍,即由調度程序把正在運行的進程放回到第 i 隊列的末尾案腺,把處理機分配給新到的高優(yōu)先權進程。
    在多級反饋隊列調度算法中康吵,如果規(guī)定第一個隊列的時間片略大于多數人機交互所需之處理時間時劈榨,便能夠較好的滿足各種類型用戶的需要。
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末晦嵌,一起剝皮案震驚了整個濱河市同辣,隨后出現的幾起案子,更是在濱河造成了極大的恐慌惭载,老刑警劉巖旱函,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異棕兼,居然都是意外死亡陡舅,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門伴挚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靶衍,“玉大人,你說我怎么就攤上這事茎芋÷簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵田弥,是天一觀的道長涛酗。 經常有香客問我,道長偷厦,這世上最難降的妖魔是什么商叹? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮只泼,結果婚禮上剖笙,老公的妹妹穿的比我還像新娘。我一直安慰自己请唱,他們只是感情好弥咪,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布过蹂。 她就那樣靜靜地躺著,像睡著了一般聚至。 火紅的嫁衣襯著肌膚如雪酷勺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天扳躬,我揣著相機與錄音脆诉,去河邊找鬼。 笑死坦报,一個胖子當著我的面吹牛库说,可吹牛的內容都是我干的。 我是一名探鬼主播片择,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼潜的,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了字管?” 一聲冷哼從身側響起啰挪,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘲叔,沒想到半個月后亡呵,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡硫戈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年锰什,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丁逝。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡汁胆,死狀恐怖,靈堂內的尸體忽然破棺而出霜幼,到底是詐尸還是另有隱情嫩码,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布罪既,位于F島的核電站铸题,受9級特大地震影響,放射性物質發(fā)生泄漏琢感。R本人自食惡果不足惜丢间,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驹针。 院中可真熱鬧千劈,春花似錦、人聲如沸牌捷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暗甥。三九已至喜滨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撤防,已是汗流浹背虽风。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寄月,地道東北人辜膝。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像漾肮,于是被迫代替她去往敵國和親厂抖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容