2014-12-05 64 views
0

如何使用Node.js和一个单一的CPU虚拟实例,如果我把一个工人线程和网络线程在同一节点上,一个会阻止其他?我需要两个CPU来并行运行吗?一个Node.js线程阻塞另一个吗?

+0

你是什么意思了'worker'线程和'web'线是什么意思? – loganfsmyth 2014-12-05 03:51:40

+0

它们只是两个独立的node.js进程。一个只处理,另一个处理Web请求。 – 2014-12-05 03:52:44

回答

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上运行就好

相关问题