Erlang 程式語言的設計者 Joe Armstrong 曾經畫過一張圖,用來解釋 Concurrency(並行)和 Parallelism(並列)的區別。
這張圖很形象,我覺得它也可以用來解釋這句話:Asynchrony(異步)和 Concurrency(並行)沒有什麽關系。
並行(單個咖啡店,多個佇列):服務員在多個佇列之間輪流服務,盡管不能同時為所有佇列服務,但透過快速切換,能有效管理多個任務。
並列(多個咖啡店,各自佇列):每個咖啡店有自己的服務員,能同時為各自佇列的客人服務,實作真正的同時處理多個任務。
異步(客人點單後可做其他事):客人點單後不必等待,而是可以做其他事情,比如閱讀報紙或檢視手機,當咖啡準備好後,服務員會通知你,你可以過來取咖啡。這種方式允許客人在等待期間最大限度地利用自己的時間。
並行主要關註於任務的管理和排程。在並行環境中,可以同時處理多個任務,不論是透過時間片輪轉在單核處理器上,還是在多核處理器上。
異步主要關註於提高程式在等待(通常是 I/O 操作)期間的效率。異步允許程式在等待一個操作完成的同時繼續執行其他程式碼,從而避免阻塞。
異步編程本質上與並行(多工同時進行)無關,而是關註於單個任務在等待時的處理方式。
W WH 系列文章列表:
[1]
[2]
[3]
[4]
[5]
[6]
最近文章列表:
[1]
[2]
[3]
[4]
[5] ?
[6]
?
[7]
[8]
[9]
[10]
[11]
[12]
[13]