並行不是你所想的那樣
您是否想過,為何只有一顆CPU的電腦,卻能同時執行數千個程式?這一切都歸功於「並行」(Concurrency) 技術,它創造了一種強大的「同時執行」的假象。
單核心CPU的多工處理模擬
觀察CPU如何在不同程式間快速切換,快到讓您以為它們是同時進行的。
問題的根源:昂貴的閒置時間
在個人電腦普及前,大型主機 (Mainframe) 極其昂貴。然而,在執行一個程式的過程中,有大量的準備時間,例如從磁帶載入編譯器或等待使用者輸入,這段期間CPU完全處於閒置狀態,造成巨大的資源浪費。
早期電腦執行程式的繁瑣流程
將滑鼠懸停在步驟上查看說明
解決方案:作業系統的巧妙調度
為了解決CPU閒置問題,分時 (Time-sharing) 作業系統誕生了。作業系統扮演著交通警察的角色,透過精準控制CPU中的「位址暫存器」,讓CPU在不同程式之間來回跳轉執行,這就是所謂的「情境切換」(Context Switching)。
CPU排程模擬器
CPU內部有一個「位址暫存器」,指向下一個要執行的指令記憶體位址。作業系統的「排程器」透過改變這個暫存器的值,來決定下一個要執行哪個程式。
作業系統如何奪回控制權?
程式不能無限制地執行,必須在某些時刻將控制權交還給作業系統。這是透過「中斷」(Interruptions) 機制實現的。
當程式需要執行敏感操作,如讀取檔案或請求記憶體時(稱為I/O操作),它會觸發一個中斷信號。CPU收到信號後,會暫停目前工作,儲存當前狀態,然後跳到作業系統的專屬記憶體區域執行「中斷服務常式」。
此時,作業系統便重新掌握了CPU的控制權,它可以處理程式的請求,並決定接下來要執行哪個程式。這個循環不斷重複,構成了多工處理的基礎。
技術的演進:從合作到強制
早期的排程方式依賴程式「自願」交還CPU,但如果遇到惡意或有bug的程式(例如無限迴圈),系統就會完全卡死。為了安全與穩定,現代作業系統採用了更強制的手段。
協同式排程
Cooperative Scheduling
先佔式排程
Preemptive Scheduling
現代應用:並行 (Concurrency) vs 平行 (Parallelism)
隨著多核心CPU的出現,我們終於可以實現真正的「平行處理」。但這不代表並行就過時了,事實上,兩者在現代電腦中協同工作,以最高效率管理無數的任務。
多核心處理模型
在多核心系統中,排程器可以將不同程式分配到不同核心上,實現真正的同時執行。
並行 (Concurrency)
是關於「處理」很多事情。它是一種結構,一種管理多個任務的方式,即使只有一個執行單元,也能透過快速切換來推進所有任務。
平行 (Parallelism)
是關於「執行」很多事情。它需要多個執行單元(如多核心),讓多個任務在物理上真正同時發生。
"Concurrency is about dealing with lots of things at once.
Parallelism is about doing lots of things at once."
並行是關於一次處理很多事,而平行是關於一次做很多事。