學習和使用Node.js已經有兩個月,使用express結合mongoose寫了一個web應用和一套RESTful web api,回過頭來看Node.js官網首頁對Node.js的介紹:Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.那么其中的non-blocking I/O model 意味著什么呢?
非阻塞的IO模型
首先,IO操作無疑是耗時的,當服務器端接收到大量請求時,為每一個請求創建進程或線程的同時,也增加了額外的內存開銷,也可能浪費更多的時間資源。
由于Node.js是事件驅動的,于是它使用了事件循環來解決IO操作帶來的瓶頸問題。在Node.js中,一個IO操作通常會帶有一個回調函數,當IO操作完成并返回時,就會調用這個回調函數,而主線程則繼續執行接下來的代碼。簡單的用一個例子來說明這個問題:
request('http://www.google.com', function(error, response, body) {   console.log(body);}); console.log('Done!');這段代碼的意思是向'http://www.google.com'發出請求,當請求返回這則調用回調函數輸出響應信息。由于Node.js的運行機制,這段代碼運行后,會立即在控制臺輸出'Done!',然后一段時間后再輸出響應的信息。
事件循環 event loop
接下來,來討論下事件循環的機制。首先說說調用 主站蜘蛛池模板: 镇远县| 资源县| 虹口区| 房山区| 肇源县| 微山县| 临澧县| 观塘区| 青海省| 武定县| 浦江县| 道真| 璧山县| 松原市| 彭阳县| 婺源县| 美姑县| 高州市| 称多县| 黄大仙区| 黔西| 遵义县| 沙坪坝区| 浦江县| 谷城县| 商城县| 兴国县| 准格尔旗| 陆丰市| 香河县| 营山县| 怀宁县| 敖汉旗| 佛冈县| 固安县| 阿合奇县| 二连浩特市| 孟连| 榆林市| 隆德县| 蒙阴县|