首頁>Club>
8
回覆列表
  • 1 # 燦爛雪碧5Q

    一 cpu個數、核數、執行緒數的關係


    cpu個數:是指物理上,也及硬體上的核心數;


    核數:是邏輯上的,簡單理解為邏輯上模擬出的核心數;一個CPU核心數模擬出2執行緒的CPU


    執行緒數:是同一時刻裝置能並行執行的程式個數,執行緒數=cpu個數 * 核數,及程數=cpu個數(2) * 核數(2)=4


    Windows: wmic 然後 物理CPU數 “cpu get NumberOfCores”, CPU核心數 “cpu get NumberOfLogicalProcessors”


    Linux:


    檢視CPU個數 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l


    檢視核數 cat /proc/cpuinfo| grep "cpu cores"| uniq




    二 cpu執行緒數和Java多執行緒



    (1) 執行緒是CPU級別的,單個執行緒同時只能在單個cpu執行緒中執行



    (2) Java多執行緒並不是由於cpu執行緒數為多個才稱為多執行緒,當Java執行緒數大於cpu執行緒數,作業系統使用時間片機制,採用執行緒排程演算法,頻繁的進行執行緒切換。



    (3) 執行緒是作業系統最小的排程單位,程序是資源(比如:記憶體)分配的最小單位



    (4)Java中的所有執行緒在JVM程序中,CPU排程的是程序中的執行緒



    執行緒的排程是指按照特定的機制為多個執行緒分配CPU的使用權。有兩種排程模型:分時排程模型和搶佔式排程模型


    分時排程模型是指讓所有執行緒輪流獲得CPU的使用權,並且平均分配每個執行緒佔用CPU的時間片。

    Java虛擬機器採用搶佔式排程模型,是指優先讓可執行池中處於就緒態的執行緒中優先順序高的佔用CPU,如果可執行池中執行緒的優先順序相同,那麼就隨機選擇一個執行緒,使其佔用CPU,處於執行狀態的執行緒會一直執行,直至它不得不放棄CPU,一個執行緒會因為以下原因放棄CPU:

    (1)Java虛擬機器讓當前執行緒暫時放棄CPU,轉到就緒態,使其他執行緒獲得執行機會

    (2)當前執行緒因為某些原因而處於阻塞狀態

    (3)執行緒執行結束


    Java執行緒讓步:


    3. Thread.yield()方法


    就是說當一個執行緒使用了這個方法之後,它就會把自己CPU執行的時間讓掉,讓自己或者其它的執行緒執行,注意是讓自己或者其他執行緒執行(根據CPU的排程),並不是單純的讓給其他執行緒。



    4.等待其他執行緒結束:join()

    當前執行的執行緒可以呼叫另一個執行緒的join()方法,當前執行的執行緒將轉到阻塞狀態,直至另一個執行緒執行結束,它才會恢復執行(阻塞恢復到就緒)

  • 中秋節和大豐收的關聯?
  • 懷孕了,婆婆不聞不問,婆婆扭腳了,發了朋友圈,要關心下嗎?