集群和叉子是否相同?

时间:2018-06-23 16:16:52

标签: node.js process cluster-computing

我已经阅读了很多nodejs系统,我有点困惑。

我有4个cpu内核。

在nodejs中, 要创建新线程,我应该做

var child = require('child_process').fork('child.js');
child.on("message", function(){});
  • 这将在cpu#0下的新线程上运行代码。
  • 以这种方式在CPU#0上创建每个新线程,直到内存已满。
  • 要使用CPU#1,#2和#3,我需要使用cluster吗?
  • 所以我可以同时使用forkcluster吗?
  • 如果cluster使用fork,那么基本上它仅创建4个线程? -对吗?
  • process.id是真实的进程ID,不是线程吗?不是线程ID?

所以我的照片是:

cpu #0:
  thread #0
  thread #1
  thread #2
  thread #3
cpu #1
  thread #0
  thread #1
  thread #2
  thread #3
so on..

我可以吗? 集群是否仅创建线程?

1 个答案:

答案 0 :(得分:0)

  

这将在cpu#0下的新线程上运行代码。

错了。操作系统将确定其在哪个内核上运行(并且可能不会始终保持在同一内核上)。这完全是操作系统的事情。并且请记住,操作系统正在处理/分配所有线程,而不仅仅是node.js线程。

关于child_process.forkcluster之间的区别...来自node.js cluster documentation

  

使用child_process.fork()生成工作进程。   方法,以便他们可以通过IPC与父级进行通信并通过   服务器来回处理。

因此群集实际上是使用child_process.fork开始的。

但是它在此之上添加了其他功能:例如,如果您正在运行http服务器,则集群可以在子进程之间“分配传入连接”。因此,如果您不将它用于需要分配传入连接的事物,则可能不需要cluster