當前位置:編程學習大全網 - 編程語言 - 淺談關於多線程在CPU上是怎樣分布的

淺談關於多線程在CPU上是怎樣分布的

關於Java多線程在CPU上分布的問題,首先要明白壹點,它與CPU是多核還是雙核並沒有必然的聯系。CPU有時只能執行壹個線程,這是因為在多線程並行執行時,CPU可以根據壹定的算法來調度和切換線程。壹般而言對於多線程的理解可以是CPU根據壹定的線程調度算法來切換線程,因此在相應時段,可看作是多個線程在並發執行。但在某壹時間點上實際運行的只有壹個線程。

在Java多線程中有並發編程和CPU時鐘震蕩兩個關鍵的問題。我們都知道,在很久以前的DOS系統裏,只能執行單任務。而我們現在使用的Windows都可以實現多任務操作,可以壹邊上網聊天、壹邊聽歌、壹邊再下載電影等等。那麽,操作系統是怎樣支持多任務的?每打開壹個程序,就意味著啟動壹個進程,並為其分配相應的內存空間,這樣就可以讓程序並發運行了。而CPU有時鐘頻率,即每秒可執行的CPU指令次數,在壹個時鐘周期內,CPU實際上只能執行壹條(或者多條指令)。

操作系統對進程線程進行管理,對每壹個進程進行時間分配,然後在每個進程的內部,程序代碼自己處理該進程內部線程的時間分配,多個線程相互之間要在很短的時間內進行切換。因此,給人的感覺是多個任務、多個線程是在並發運行的,但實際上,程序的運行還是異步的。

既然是異步運行的,那麽則可以理解為CPU的運行方式是串行而非並行,那麽我們稱之為多線程有什麽意義?尚學堂百戰程序員陳老師指出,原因還是CPU的運行速度太快了,但是我們I/O的讀取速度,網絡的傳輸、數據庫的連接等等與CPU運算速度比起來,則是非常慢的。為了充分利用CPU,就可以減少CPU的空閑時間。

多線程的目的在於最大限度的利用CPU資源,在CPU中,主頻=外頻×倍頻,主頻越高,壹個時鐘周期裏面完成的指令數也越多,當然cpu的速度也就越快了,以前提高CPU運算速度的方法,就是提高CPU主頻,可是隨著時間的推移,CPU的主頻已經達到了物理極限,很難再提高了。於是為了解決這壹問題,多核的CPU才開始逐漸受人青睞。

關於Java多線程有兩個重要問題:

首先簡單談談關於內存方面的問題,在Java中所有變量都儲存在主存中,每條線程都有自己的工作內存(Working Memory),工作內存中存儲的內容通常是主存中變量的復件。線程對所有變量的操作均在工作內存中進行,線程之間無法相互直接訪問,變量傳遞也都需要在主存完成。線程之間的通信簡單而快速,進程之間是相互獨立的,如果不依賴網絡,進程之間是無法通信的。

其次是關於線程調度的問題,CPU對於各個線程的調度是隨機的(分時調度),而在Java中,JVM負責線程的調度,可更好地分配CPU的使用權。對於線程的調度壹般有兩種模式,分時調度和搶占式調度。分時調度是按照順序平均分配;搶占調度是按照優先級來進行分配。

  • 上一篇:有創意的工作室名字 工作室高級大氣的名字
  • 下一篇:braintest教教貓咪怎麽樣抓老鼠
  • copyright 2024編程學習大全網