同步、非同步、多線程與事件型綜述

來源:互聯網
上載者:User
同步、非同步、多線程與事件型綜述

作者:chszs,轉載需註明。部落客頁:http://blog.csdn.net/chszs

首先要瞭解什麼是阻塞和阻塞式IO。
線程在執行中如果遇到磁碟讀寫或網路通訊(統稱IO操作),通常要耗費較長的時間,這時作業系統會剝奪此線程的CPU控制權,使其暫停執行,同時將資源讓給其他的背景工作執行緒,這種線程調度方式稱為阻塞。當IO操作完畢時,作業系統將這個線程的阻塞狀態解除,恢複其對CPU的控制權,令其繼續執行。這種IO模式就是同步式IO或阻塞式IO。

其次是瞭解什麼是非同步IO。
相應地,非同步IO即非阻塞式IO則針對所有IO操作不採用阻塞的策略。當線程遇到IO操作時,不會以阻塞的方式等待IO操作的完成或資料的返回,而只是將IO請求發送給作業系統,繼續執行下一條語句。當作業系統完成IO操作時,以事件的形式通知執行IO操作的線程,線程會在特定時候處理這個事件。為了處理非同步IO,線程必須有事件迴圈,不斷地檢查有沒有未處理的事件,依次予以處理。

阻塞模式下,一個線程只能處理一項任務,要想提高輸送量必須通過多線程。而非阻塞模式下,一個線程永遠在執行計算操作,這個線程所使用的CPU核心利用率永遠是100%,IO以事件的方式通知。在阻塞模式下,多線程往往能提高系統輸送量,因為一個線程阻塞時還有其他線程在工作,多線程可以讓CPU資源不被阻塞中的線程浪費。而在非阻塞模式下,線程不會被IO阻塞,永遠在利用CPU。多線程帶來的好處僅僅是在多核CPU的情況下利用更多的核,而Node.js的單線程也能帶來同樣的好處。這就是為什麼Node.js使用了單線程、非阻塞的事件編程模式。

單線程事件驅動的非同步式IO比傳統的多線程阻塞式IO究竟好在哪裡呢?簡而言之,非同步式IO就是少了多線程的開銷。對作業系統來說,建立一個線程的代價比較昂貴,需要給它分配記憶體、列入調度,同時線上程切換的時候還要執行記憶體換頁,CPU的緩衝被清空,切換回來的時候還要重新從記憶體中讀取資訊,破壞了資料的局部性。
 
當然,非同步式編程的缺點在於不符合人們一般的程式設計思維,容易讓控制流程變得晦澀難懂,給編碼和調試都帶來不小的困難。習慣傳統編程模式的開發人員在剛剛接觸到大規模的非同步式應用時往往會無所適從,但慢慢習慣以後會好很多。儘管如此,非同步式編程還是較為困難,不過可喜的是現在已經有了不少專門解決非同步式編程問題的庫(如async)。

同步IO與非同步IO的比較
——————————————————————————————————————————————————————————————————
同步IO                                                                           非同步IO
——————————————————————————————————————————————————————————————————
利用多線程提高輸送量                                              單線程即可實現高輸送量
通過時間片分割和線程調度利用多核CPU             通過功能劃分利用多核CPU
需要由OS調度多線程使用多核CPU                        可以將單進程綁定到單核CPU
難以充分利用CPU資源                                             可以充分利用CPU資源
記憶體軌跡大,資料局部性弱                                     記憶體軌跡小,資料局部性強
符合線性編程思維                                                 不符合傳統編程思維

——————————————————————————————————————————————————————————————————

基於多線程的模型也有相應的解決方案,如輕量級線程等。事件驅動的單線程非同步模型與多線程同步模型到底誰更好是一件非常有爭議的事情,因為儘管消耗資源,後者的吞吐率並不比前者低。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.