如何使用Node.js和一個單一的CPU虛擬實例,如果我把一個工人線程和網絡線程在同一節點上,一個會阻止其他?我需要兩個CPU來並行運行嗎?一個Node.js線程阻塞另一個嗎?
0
A
回答
0
是的,一會阻塞另一個如果所有同步代碼。
因爲只有一個虛擬CPU實例(假設不超線程)中,在覈心層中,CPU只需要以同步方式操作的指令:1,隨後2,然後如圖3所示,然後4.
THEREFOR在理論上講,如果一個工人有這樣的事情,它會阻止:
while (true) {
doSomething();
}
免責聲明:我不知道在操作系統內核是否會處理有關封鎖指令東西。
但是,Node.js會在事件循環中運行所有I/O,以及您明確聲明要在事件循環中運行的任務(process.nextTick()
,setTimeout()
...)。事件循環的工作方式是很好地解釋here,所以我不會進入太多細節 - 然而,唯一阻止關於Node.js的部分是同步運行的代碼,像上面的例子。
所以,長話短說:既然你的網絡工作者使用的Node.js和http
模塊是一個異步模塊,您的網絡工作者不會阻止。由於您的工作線程也使用Node.js,假設它執行事件發生時啓動的代碼(例如訪問您的網站),它不會阻止。
要運行同步完美並行編碼,您需要兩個CPU。然而,假設它是異步的,它應該在一個CPU上運行就好。
相關問題
- 1. 線程只阻塞第一個線程
- 2. python爲什麼在一個線程中真正阻塞另一個線程
- 3. 從另一個線程返回一個值。沒有阻塞主線程
- 4. 爲什麼啓動一個線程被另一個線程阻塞?
- 5. 一個SELECT如何阻塞另一個?
- 6. C#ThreadPool一個線程阻塞其他?
- 7. 當一個線程被阻塞時,可能導致在同一個進程或整個進程中阻塞另一個線程?
- 8. 爲什麼NSTimer在另一個線程運行時被阻塞?
- 9. node.js無阻塞POST請求等待另一個POST請求
- 10. 從另一個線程釋放解釋器鎖/強制另一個線程阻塞
- 11. 在另一個線程中調用Thread.sleep()時UI線程被阻塞
- 12. 可以阻塞的java線程的方法由另一個線程執行?
- 13. 爲什麼在另一個線程中阻塞的IO阻止CreateWindowEx()返回
- 14. Windows C++如何調用從一個線程到另一個線程的阻塞讀取?
- 15. 一個線程可以中斷另一個線程嗎?
- 16. 阻止阻塞的線程阻塞
- 17. 線程阻塞整個程序
- 18. 寫一個非阻塞程序
- 19. Python線程阻塞進一步執行
- 20. 阻塞隊列不阻塞線程?
- 21. 從另一個線程關閉套接字時,阻塞recv不會退出?
- 22. ,我將如何停止從另一個線程阻塞的接受函數?
- 23. Poco:如何從另一個線程中止阻塞套接字操作
- 24. MessageBeep線程阻塞
- 25. 阻塞線程 - Java
- 26. 非阻塞線程
- 27. Java線程阻塞
- 28. 如何終止一個特定的阻塞線程
- 29. Tomcat沒有響應,threadump顯示一個被阻塞的線程
- 30. C#如何殺死一個阻塞的線程?
你是什麼意思了'worker'線程和'web'線是什麼意思? – loganfsmyth 2014-12-05 03:51:40
它們只是兩個獨立的node.js進程。一個只處理,另一個處理Web請求。 – 2014-12-05 03:52:44