node.js - 集群和分叉是一样的吗?
问题描述
看了很多node.js系统,有点迷糊。
我有一个 4 核 CPU。
在 node.js 中,要创建一个新线程,我应该这样做
var child = require('child_process').fork('child.js');
child.on("message", function(){});
- 这将在 CPU #0 下的新线程上运行代码。
- 以这种方式创建的每个新线程都将在 CPU #0 上创建,直到内存已满。
- 要使用 CPU #1 和 #2 和 #3,我需要使用
cluster
,对吗? - 所以我可以同时使用,
fork
对cluster
吗? - 如果基本上这样
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..
我对么?集群是否只创建线程?
解决方案
这将在 cpu #0 下的新线程上运行代码。
错误的。操作系统将确定它在哪个内核上运行(它可能并不总是在同一个内核上)。这完全是操作系统的事情。请记住,操作系统正在处理/分配所有线程,而不仅仅是 node.js 线程。
child_process.fork
至于和之间的区别cluster
......来自node.js集群文档:
工作进程是使用 child_process.fork() 方法生成的,因此它们可以通过 IPC 与父进程通信并来回传递服务器句柄。
所以集群实际上是用来 child_process.fork
开始的。
但它在此之上添加了额外的功能:例如,如果您正在运行一个 http 服务器,集群可以在子进程之间“分发传入连接”。因此,如果您没有将它用于需要分发传入连接的东西,您可能不需要cluster
.
推荐阅读
- python - 您可以使用 loc 选择一系列列以及该范围之外的列吗?
- c# - 错误回发的模型列表 ASP.NET MVC
- django - 分叉模板 django-oscars 后仪表板不填充值
- python-3.x - 如何从给定元组中提取 IP 地址并混合字符串和整数
- selenium-webdriver - Selenium - 键盘无法访问元素 - 尝试输入日期
- jquery - 在 Liferay 6.2 中上传自定义引导模板
- google-app-engine - Google App Engine 如何关联不同的用户 ID?
- java - Cmd 中的 Gradlew 和 Java 9 :FAILURE: 构建失败并出现异常
- arrays - 值不为空的控制器中的 angularjs 过滤器
- python - 为什么我的 Django 模板表单中的单选按钮没有显示在屏幕上?