天天看點

Nodejs開發指南 讀書筆記随談之一

Nodejs開發指南 讀書筆記随談之一

這本書是市面上講nodejs的一本不可多得的入門書,當初想學 nodejs的時候,找了半天,終于找到了這本好書,随後一發不可收拾,花了一兩天的功夫就看玩了,感覺作者系統功力深厚,以下隻是偶的一些摘要,權當心得體會。

書裡說nodejs的核心特性是異步io,事件驅動,任何io操作都是由事件來驅動的。

說到異步io又不得不來看看作業系統的<code>線程與阻塞</code>。

什麼是阻塞呢,<code>線程在執行中遇到磁盤讀寫或者資料庫通訊,網絡通訊這種耗時比較多的時候,作業系統将會剝奪此線程的cpu資源,并暫停此線程,轉而去執行别的線程,此線程排程方式稱為阻塞</code>。當i/o操作完成之後,作業系統又恢複此線程,讓其繼續執行,這種i/o模式通常稱為同步i/o或者阻塞式i/o。

異步式io或者非阻塞式i/o則針對所有操作采取不阻塞的方式,當線程遇到io操作的時候,不會以阻塞的方式等待io操作完成或者資料的傳回,而是将io操作發送給作業系統,然後接着執行下一個操作,當作業系統執行完io操作之後,将是事件的方式通知執行io的線程,線程會在特定的時候執行這個事件。這一切的前提條件就是,系統需要一個事件循環,以不斷的去查詢有沒有未處理的事件,然後給預處理。

阻塞方式下,一個線程隻能處理一個任務,要想提高系統的吞吐量,必須使用多線程 ;而非阻塞情況下,一個線程永遠在執行計算,cpu使用率幾乎100%,io以事件的方式通知。在阻塞模式下,多線程能夠提高系統吞吐量,因為一個線程在阻塞的時候,還有另一個線程在工作,多線程 不會讓cpu資源線上程阻塞的時候浪費。而在非阻塞模式下,線程不會被io阻塞,cpu資源也不會浪費。多線程隻是在多核的時候利用更多的核,而nodejs的單線程也能帶來這個好處。是以這就是nodejs采取單線程,非阻塞的事件程式設計模式。

以下是書中的兩幅圖,

Nodejs開發指南 讀書筆記随談之一
Nodejs開發指南 讀書筆記随談之一

再弄一個同步式io與異步式io的特點比較,依然用書中的圖

Nodejs開發指南 讀書筆記随談之一

最後以異步讀取一個本地的檔案來結束本文,:)

以上代碼,可以在指令行中,切換到demo.js的目錄中,輸入node demo.js回車即可運作看到結果。