您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java的調度機制怎么理解”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java的調度機制怎么理解”文章能幫助大家解決問題。
CPU個數:是指物理上,即硬件上的核心數;
核心數:是邏輯上的,簡單理解為邏輯上模擬出的核心數;
線程數:是同一時刻設備能并行執行的程序個數,線程數 = cpu個數 * 核數;
單個CPU線程在同一時刻只能執行單一Java程序,也就是一個線程
單個線程同時只能在單個CPU線程中執行
線程是操作系統最小的調度單位,進程是資源(比如:內存)分配的最小單位
Java中的所有線程在JVM進程中,CPU調度的是進程中的線程
Java多線程并不是由于CPU線程數為多個才稱為多線程,當Java線程數大于CPU線程數,操作系統使用時間片機制,采用線程調度算法,頻繁的進行線程切換。
當線程處于IO操作時,線程是阻塞的,線程由運行狀態切換到等待狀態。此時CPU會做上下文切換,以便處理其他程序;當IO操作完成后,CPU會收到一個來自硬盤的中斷信號,CPU正在執行的線程因此會被打斷,回到ready隊列。而先前因I/O而waiting的線程隨著I/O的完成也再次回到就緒隊列,此時CPU可能會選擇他執行。
并行:指兩個或多個事件在同一時刻點發生,CPU同時執行;并發:指兩個或多個事件在同一時間段內發生,CPU交替執行;
操作系統是基于線程調度的,在同一時刻,JAVA進程中不同的線程可能會在不同的核上并行運行。
線程是調度的最小單位,而進程是資源(比如:內存)分配的最小單位。
時間片輪轉法(Round-Robin,RR):
根據先進先出原則,排成隊列(就緒隊列),調度時,將CPU分配給隊首進程,讓其執行一個時間段(稱為:時間片),時間片通常為10-100ms數量級,當執行的時間片用完時,會由計時器發出時鐘中斷請求,調度程序便據此來停止該進程的執行,并將它排到隊列末尾,然后再把CPU重新分配給當前隊列的隊首進程,同理如此往復。
時間片大小取決于:
系統對響應時間的要求
就緒隊列中進程的數目
系統的處理能力
進程調度
采用此算法的系統,其程序就緒隊列往往按進程到達的時間來排序。進程調度程序總是選擇就緒隊列中的第一個進程,也就是說按照先來先服務原則調度,但一旦進程占用處理機則僅使用一個時間片。在使用一個時間片后,進程還沒有完成其運行,它必須釋放出處理機給下一個就緒的進程,而被搶占的進程返回到就緒隊列的末尾重新排隊等待再次運行。
處理器同一個時間只能處理一個任務。處理器在處理多任務的時候,就要看請求的時間順序,如果時間一致,就要進行預測。挑到一個任務后,需要若干步驟才能做完,這些步驟中有些需要處理器參與,有些不需要(如磁盤控制器的存儲過程)。不需要處理器處理的時候,這部分時間就要分配給其他的進程。原來的進程就要處于等待的時間段上。經過周密分配時間,宏觀上就象是多個任務一起運行一樣,但微觀上是有先后的,就是時間片輪換。
實現思想
時間片輪轉算法的基本思想是,系統將所有的就緒進程按先來先服務算法的原則,排成一個隊列,每次調度時,系統把處理機分配給隊列首進程,并讓其執行一個時間片。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程序根據這個請求停止該進程的運行,將它送到就緒隊列的末尾,再把處理機分給就緒隊列中新的隊列首進程,同時讓它也執行一個時間片
所有的Java虛擬機都有一個線程調度器,用來確定哪個時刻運行哪個線程。主要包含兩種:搶占式線程調度器和協作式線程調度器。
搶占式線程調度: 每個線程可能會有自己的優先級,但是優先及并不意味著高優先級的線程一定會被調度,而是由CPU隨機的選擇,所謂搶占式的線程調度,就是說一個線程在執行自己的任務時,雖然任務還沒有執行完,但是CPU會迫使它暫停,讓其它線程占有CPU的使用權。
協作式線程調度: 每個線程可以有自己的優先級,但優先級并不意味著高優先級的線程一定會被最先調度,而是由cpu時機選擇的,所謂協作式的線程調度,就是說一個線程在執行自己的任務時,不允許被中途打斷,一定等當前線程將任務執行完畢后才會釋放對cpu的占有,其它線程才可以搶占該cpu。
兩者對比:
搶占式線程調度不易發生饑餓現象,不易因為一個線程的問題而影響整個進程的執行,但是其頻繁阻塞與調度,會造成系統資源的浪費。協作式的線程調度很容易因為一個線程的問題導致整個進程中其它線程饑餓。
總結:
Java在調度機制上采用的是搶占式的線程調度機制。
Java線程在運行的過程中多個線程之間是協作式的。
關于“Java的調度機制怎么理解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。