2012-11-01 72 views
0

Nodejs據說只使用一個進程來處理請求,然後這些使用I/O的函數將異步執行,這將提高Web服務器的效率。但是,那些處理I/O的進程不計數?與傳統的Web服務器相比,如Apache,它使用多線程來處理請求,其中每個請求在一個線程中,成本(請求+ I/O)是否降低?Nodejs的回調機制

+0

不是一個真正的編程問題.. –

+0

你是認真的嗎?如果你不知道某種語言的內在機制,你怎麼編程? – qqibrow

+0

[如何node.js服務器比基於線程的服務器更好]可能的重複(http://stackoverflow.com/questions/3759683/how-node-js-server-is-better-than-thread-based-server) – slebetman

回答

0

是的,node.js只需要一個線程(這比根據操作系統需要一個進程更具限制性)。是的,這會影響您的編程要求:

- 您的程序絕不能阻止!

有相當可以參考一些資源,至於爲什麼node.js的是如此之快,如:

http://www.manning.com/cantelon/NjsiA_meap_ch01.pdf

http://nodejs.org/about/

node.js的節省帶來的線程處罰通過上下文切換,其他服務器需要(參見Slebetman)。我們在2004年用C++構建了自己的這樣的服務器,由於高性能要求,當你的服務器必須打開和關閉很多連接時,這種方法確實節省了大量資源。

我認爲你在問題中缺少的是node.js將需要很長時間的操作交給操作系統並用回答調用。 O/S完全是多進程的。所以node.js只需要一個線程來控制,但I/O是由O/S進程控制的。

但是,node.js可以產生額外的進程,您可以在其中運行並行程序。

+1

這是不正確的。看到我以前對這個問題的答案:http://stackoverflow.com/questions/3759683/how-node-js-server-is-better-than-thread-based-server/3759991#3759991 – slebetman

+0

現在讓答案更加精確。心連心。我已經爲您的其他帖子+1了,謝謝。 –