我知道這個問題已經在過去詳細討論過了(How is Node.js inherently faster when it still relies on Threads internally?),但我仍然無法正確理解node.js事件循環模型並且是單線程模型,它如何處理併發請求。Node.js事件循環模型如何擴展很好
Uptil現在我的理解是:我們收到一個IO請求 - >一個線程由node.js在內部產生,IO請求交給它 - >因爲這是一個IO請求,所以CPU把它交給DMA控制器並釋放此線程 - >此線程再次進入線程池以提供不同的請求 - > DMA仍在執行IO,一旦DMA獲取所有數據,某種事件被觸發 - >此事件被捕獲node.js系統,它將提供的回調函數放在事件循環中 - >當事件循環有機會執行對IO提取的數據的回調時 - >由於閉包,回調函數對獲取的數據執行通過回調只有
所以這個過程不斷重複。請人闡明我的理解,並提供一些信息
好吧,你清楚地瞭解eventloop是如何工作的,我不知道我們可以說這會讓它*點擊*給你。當諸如數據庫交互,文件訪問等事件發生時,事件循環繼續,處理其他請求,同時等待所述事件完成。這些其他事件由系統在單獨的線程中發生,而不是由節點發生。 – 2014-11-04 17:11:30
也許這裏的答案會有所幫助? http://stackoverflow.com/questions/22887216/how-does-a-single-threaded-event-driven-webserver-like-node-js-work-at-the-soc – 2014-11-04 17:14:05
我相信我的一般理解是清楚的...但我正在尋找更好的細節...當我說「因爲這是一個IO請求,所以CPU把它交給DMA控制器並釋放這個線程 - >這個線程再次進入線程池以提供不同的請求「這是否正確,並且是節點中線程消耗數量較少(因此內存使用量較少)的原因?在另一個像java這樣的系統中,如果我編寫相同的邏輯,即將一個IO請求傳遞給一個線程,那麼該線程是否會等待請求完成? – JackSparrow 2014-11-04 18:10:37