2013-07-05 67 views
0

如果節點只有兩個線程,一個執行主代碼,另一個執行所有回調,如果回調是資源/時間密集型的,那麼阻塞仍然會發生。在node.js中如何實現事件循環?

假設您擁有100,000個併發用戶,並且對節點應用程序的每個客戶端請求都會運行復雜且耗時的數據庫查詢(假設沒有緩存完成),以後的用戶在等待查詢返回時會遇到阻塞情況嗎?

function onRequest(request, response) { 
    //hypothetical database call 
    database.query("SELECT * FROM hugetable", function(data) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("database result: " + data); 
    response.end(); 
    });  
} 

http.createServer(onRequest).listen(8888); 

如果每個回調可以在其自己的線程上運行,那麼這是一個非問題。但是,如果所有的回調都在一個單獨的專用線程上運行,那麼在這種情況下節點並沒有真正幫助我們。

回答

0

請閱讀這篇好文章:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ 沒有多個線程,只有一個執行你的node.js邏輯。 (幕後I/O不應該被考慮用於應用程序邏輯)

對數據庫的請求也是異步的 - 你所做的是將查詢放入隊列以傳輸到db socket,然後其他所有事情都發生在幕後和它只會在數據庫出現響應時纔回調,所以不會阻塞應用程序邏輯。