如何使用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. 为什么启动一个线程被另一个线程阻塞?
- 3. 从另一个线程返回一个值。没有阻塞主线程
- 4. python为什么在一个线程中真正阻塞另一个线程
- 5. 一个SELECT如何阻塞另一个?
- 6. C#ThreadPool一个线程阻塞其他?
- 7. 当一个线程被阻塞时,可能导致在同一个进程或整个进程中阻塞另一个线程?
- 8. 为什么NSTimer在另一个线程运行时被阻塞?
- 9. 从另一个线程释放解释器锁/强制另一个线程阻塞
- 10. 可以阻塞的java线程的方法由另一个线程执行?
- 11. 在另一个线程中调用Thread.sleep()时UI线程被阻塞
- 12. 为什么在另一个线程中阻塞的IO阻止CreateWindowEx()返回
- 13. Windows C++如何调用从一个线程到另一个线程的阻塞读取?
- 14. 阻塞队列不阻塞线程?
- 15. ,我将如何停止从另一个线程阻塞的接受函数?
- 16. 从另一个线程关闭套接字时,阻塞recv不会退出?
- 17. 等待一个结果,而不阻塞线程
- 18. C#如何杀死一个阻塞的线程?
- 19. 如何阻塞一个线程并恢复它
- 20. 睡一个线程被阻塞标准输入
- 21. 异步加载一个世界或不阻塞主线程
- 22. 如何杀死一个阻塞的线程
- 23. 如何终止一个特定的阻塞线程
- 24. Tomcat没有响应,threadump显示一个被阻塞的线程
- 25. 阻塞线程 - Java
- 26. Java线程阻塞
- 27. Java线程阻塞
- 28. MessageBeep线程阻塞
- 29. NSTImer事件会阻塞主线程吗?
- 30. 关闭流阻塞线程吗?
你是什么意思了'worker'线程和'web'线是什么意思? – loganfsmyth 2014-12-05 03:51:40
它们只是两个独立的node.js进程。一个只处理,另一个处理Web请求。 – 2014-12-05 03:52:44