node.js异步式IO与事件式编程
生活随笔
收集整理的這篇文章主要介紹了
node.js异步式IO与事件式编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Node.js最大的特性就是異步式I/O與事件緊密結合的編程模式。這種模式與傳統的同步式IO線性的編程思路有很大的不同,因為控制流很大程度上要靠事件和回調函數來組織,一個邏輯要拆分為若干個單元格。
內容:阻塞和線程
1.同步式I/O或阻塞式I/O
線程在執行中如果遇到磁盤讀寫或網絡通信,通常要耗費較長時間。這時操作系統會剝奪這個線程的CPU控制權,使其暫停執行,同時將資源讓給其他的工作線程,這種線程調度方式成為阻塞,當I/O操作完畢時,操作系統將這個線程的阻塞狀態解除,恢復其對CPU的控制權、令其繼續執行。
2.異步式I/O或非阻塞式I/O
針對所有I/O操作不采用阻塞策略,當線程遇到I/O操作時,不會以阻塞的方式等待I/O操作的完成或數據的返回,而只是講IO請求發送給操作系統,繼續執行下一條語句,當操作系統完成IO操作時,以事件的形式通知執行IO操作的線程,線程會在特定時候處理這個事件,為了 處理異步IO,線程必須有事件循環,不斷的檢查有沒有未處理的事件,依次予以處理。
3.非阻塞與阻塞模式區別
非阻塞模式下,一個線程永遠在執行計算操作,這個線程所使用的CPU核心利用率永遠是100%,IO以事件的方式通知。
阻塞模式下,多線程往往能提高系統吞吐量,因為一個線程阻塞還有其他線程在工作,多線程可以讓CPU資源不被阻塞中的線程浪費。
調度:當前一個工作,在5分鐘之后執行
4.同步式IO與異步式IO區別
同步式IO(阻塞式)??????????????????????????????????????????????????????????異步式IO(非阻塞)
利用多線程提供吞吐量??????????????????????????????????????????單線程即可實現高吞吐量
通過事件片分割和線程調度利用多核CPU????????????通過功能劃分利用多核
需要由操作系統調度多線程使用多核CPU????????????可以將單線程綁定到單核CPU
難以充分利用CPU資源????????????????????????????????????????????可以充分利用CPU資源
內存軌跡大,數據局部性弱????????????????????????????????????內存軌跡小,數據局部性強????
?符合線性的編程思維????????????????????????????????????????????????不符合傳統編程思維
總結
以上是生活随笔為你收集整理的node.js异步式IO与事件式编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Stein算法(求两个数最大公约数)
- 下一篇: 全排列算法解析(视频+详解+代码+STL