- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我如何在多线程中运行 Node 服务器。让我先从我的场景开始。我有 2 个文件,一个是 server.js,另一个是 process.js 现在我的要求是如何在其他共享线程(如集群)中运行 process.js。 注意:- 集群在我的场景中不起作用。我想要其他与集群相同的东西所以我的问题是 child_process.folk 或 spawn 是否与集群相同???或者我如何在不使用集群的情况下在 Node 中实现多线程。此外,我浏览了子进程文档,但并没有消除我的疑问。请原谅我的愚蠢问题
最佳答案
如果 process.js 处理的工作性质是 CPU 密集型,您可以使用工作线程 API。由于您不想使用集群模块,工作线程可能很有用。事实上,推荐的处理 CPU 密集型工作的方法。
集群模块使用child_process.fork
创建子进程。
a special case of the spawn() functionality for spawning Node processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in. read here more https://nodejs.org/api/cluster.html#cluster_how_it_works.
工作线程的特别之处:
ArrayBuffers
将内存从一个线程传输到另一个线程。SharedArrayBuffer
可从任一线程访问。它允许您在线程之间共享内存(限于二进制数据)。Atomics 可用,它可以让您更高效地并发执行一些过程,并允许您在 JavaScript 中实现条件变量。
MessagePort
,用于不同线程之间的通信。它可用于在不同的 Worker 之间传输结构化数据、内存区域和其他 MessagePort。
MessageChannel
表示用于不同线程之间通信的异步双向通信 channel 。WorkerData
用于传递启动数据。一个任意的 JavaScript 值,其中包含传递给该线程的 Worker 构造函数的数据的克隆。就像使用 postMessage()
工作线程
的一个例子Main.js(在你的例子中是 server.js)
const { Worker } = require('worker_threads')
function runWorker() {
const worker = new Worker('./worker.js',{workerData:{i:0}});
worker.on('message',function(data){
console.log(data);
});
worker.on('error', function(error){
console.log(error)
});
worker.on('exit', (code) => {
if (code !== 0)
console.log(new Error(`Worker stopped with exit code ${code}`));
})
}
runWorker()
worker.js(在你的例子中是 process.js)
const { workerData, parentPort } = require('worker_threads')
/* You can do any heavy stuff here, in a synchronous way
without blocking the "main thread"*/
console.log(workerData)
let i=workerData.i
for(;i<500;i++){
parentPort.postMessage({I:i})
}
有助于入门的资源:
https://nodesource.com/blog/worker-threads-nodejs/
https://medium.com/@Trott/using-worker-threads-in-node-js-80494136dbb6
https://medium.com/nodejsmadeeasy/workers-threads-in-node-js-part2-ec45ac084963
关于node.js - 如何在nodejs中使用多线程或多进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60098884/
我是一名优秀的程序员,十分优秀!