回覆列表
-
1 # IT科技領域創作分享者
-
2 # 和之禾
0
打個比喻:
假設1個CPU是一個人,
那麼1個人一會喝水,一會又去打字。然後,喝水喝到一半,還沒來得及嚥下去,就伸手打一個字,還沒打完,又停下來,咽口水下去。這就是多執行緒了。CPU切換速度快,看起來是一起執行的,實際上是不停 的切換。
多個cpu就相當於多個人,並行的話,打個比方,就像多個人一起去搬磚一樣。
多執行緒並不是建立在有多少個CPU的基礎上進行工作,多執行緒主要是透過CPU的時間片技術實現,比如在1S的時間內,在第一個0,1S處理一個執行緒的
工作,然後會儲存好當前執行緒的工作狀態,在下一個0.1S處理另一個執行緒的工作,每個時間都只能處理一個執行緒,只不過CPU的切換速度非常的快,
我們察覺不到而已,這其實是一種偽並行,而多核的CPU則是說我們每個核都可以單獨的處理一個執行緒,這樣的話處理速度自然就比單核的來說要快了
計算機cpu與多執行緒
程序和執行緒:程序包含執行緒,一個程序中包含多個執行緒.執行緒是cpu排程和分配的基本單位,程序是作業系統進行資源分配(cpu,記憶體,硬碟io等)的最小單位.
單核cpu:實現多程序依靠於作業系統的程序排程演算法,比如時間片輪轉演算法,比如有3個正在執行的程式(即三個程序),作業系統會讓單核cpu輪流來執行這些程序,然後一個程序只執行2ms,這樣看起來就像多個程序同時在執行,從而實現多程序.
多執行緒其實是最大限度的利用cpu資源.一個擁有兩個執行緒的程序的執行時間可能比一個執行緒的程序執行兩遍的時間還長一點,因為執行緒的切換也需要時間.即採用多執行緒可能不會提高程式的執行速度,反而會降低速度,但是對於使用者來說,可以減少使用者的響應時間.
多核cpu:什麼是多核cpu?多核cpu是一枚處理器中整合多個完整的計算引擎(核心).
多核cpu和單核cpu對於程序來說都是併發,並不是並行.
但是多核cpu每一個核心都可以獨立執行一個執行緒,所以多核cpu可以真正實現多執行緒的並行.比如四核可以把執行緒1234分配給核心1234,如果還有執行緒567就要等待cpu的排程.執行緒1234屬於並行;如果一會核心1停止執行執行緒1改為執行執行緒5,那執行緒15屬於併發.
java多執行緒
JVM多執行緒與多核cpu:java中透過多執行緒機制使得多個任務同時執行處理,所有的執行緒共享JVM記憶體區域main memory,而每個執行緒又單獨的有自己的工作記憶體,當執行緒與記憶體區域進行互動時,資料從主存複製到工作記憶體,進而交由執行緒處理(操作碼+運算元).
由於Java 虛擬機器的多執行緒是透過執行緒輪流切換並分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器(對於多核處理器來說是一個核心)只會執行一條執行緒中的指令.所以多核cpu情況下多個執行緒會在多個核心上排程.