1. 程式人生 > >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資源                 記憶體軌跡大,資料區域性性弱                                    記憶體軌跡小,資料區域性性強                     符合線性的程式設計思維                                                不符合傳統程式設計思維