2015-04-02 53 views
5

我已經開始閱讀node.js.我有幾個問題:瞭解node.js

  1. 爲節點比多線程只是因爲它從關心死鎖節省了我們並且減少線程創建開銷,還是有其他的因素也比較好? Node在內部使用線程,所以我們不能說它節省了線程創建開銷,只是它在內部進行管理。

  2. 爲什麼我們說節點不適合多核處理器?它在內部創建線程,所以它必須獲得多核的好處。我們爲什麼說它對CPU密集型應用程序不好?我們總是可以爲CPU密集型任務分配新進程。

  3. 只有回調調度爲線程或還有其他情況下的函數?

  4. 非阻塞I/O也可以使用線程來實現。主線程可能隨時準備好接收新的請求。那麼有什麼好處?

+0

還有一堆類似的螺紋,其討論這個話題,即http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-node-js – SGD 2015-04-02 19:15:29

+0

對於歷史的關於這個問題的觀點,請參閱:http://stackoverflow.com/questions/3759683/how-node-js-server-is-better-than-thread-based-server/3759991#3759991 – slebetman 2015-04-06 02:17:18

+0

另請參閱原始的c10k問題開始一切:http://www.kegel.com/c10k.html – slebetman 2015-04-06 02:18:34

回答

0
  1. 正確的。

  2. Node.js通過child processes,clusters等進行比例縮放。

  3. 回調只是開發人員用來實現異步方法的常用約定。沒有技術上的原因你必須包括它們。例如,您可以讓所有的異步方法使用promise。

  4. 所有節點都可以用線程來完成,但是node.js的異步IO所涉及的代碼/開銷比使用多線程代碼要少。例如,您不需要像Java那樣每次創建thread or runnable的實例。

+1

1是部分正確的。 Node.js內部不使用線程。這是一個巨大while()循環select()/ poll()/ epoll()/ libevent – slebetman 2015-04-06 02:15:01