淺談關於多線程在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的使用權。對於線程的調度通常有兩種模式,分時調度和搶佔式調度。分時調度是按照順序平均分配;搶佔調度是按照優先級來進行分配。數據庫

以上就是關於多線程在CPU上的分佈問題的簡單論述,從而幫助你們加深對多線程的理解。編程

相關文章
相關標籤/搜索