Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js子进程分支:CPU关联_Javascript_Node.js_Fork_Cpu_Spawn - Fatal编程技术网

Javascript Node.js子进程分支:CPU关联

Javascript Node.js子进程分支:CPU关联,javascript,node.js,fork,cpu,spawn,Javascript,Node.js,Fork,Cpu,Spawn,我想使用Node.js中的child\u process.fork函数生成一个新进程。此示例也适用于spawn函数 为了确保这些子进程均匀地利用机器上的所有核心,我想设置它们的CPU相关性,从而迫使它们迁移到所需的核心 我知道如何在C和终端中实现这一点,但在Node.js中如何实现这一点?我会在前面说,设置进程的处理器相关性可能是个坏主意。每个节点进程都有许多线程(JS运行的主V8线程加上执行I/O和其他本机工作的libuv线程),将节点进程限制在单个核心必然会降低速度 什么都不做,让操作系统调

我想使用Node.js中的
child\u process.fork
函数生成一个新进程。此示例也适用于
spawn
函数

为了确保这些子进程均匀地利用机器上的所有核心,我想设置它们的CPU相关性,从而迫使它们迁移到所需的核心


我知道如何在C和终端中实现这一点,但在Node.js中如何实现这一点?

我会在前面说,设置进程的处理器相关性可能是个坏主意。每个节点进程都有许多线程(JS运行的主V8线程加上执行I/O和其他本机工作的libuv线程),将节点进程限制在单个核心必然会降低速度

什么都不做,让操作系统调度器处理分叉进程及其线程,可能会产生更好的性能

当然,真正了解的唯一方法是在负载下对系统进行基准测试。测试不同级别的负载(轻、中、高),看看哪些性能更好


我可以想出两种设置流程关联性的方法:

  • 丑陋:使用
    exec()
    运行
    taskset
    设置进程的关联性。(对当前进程使用
    process.pid
    ,或从
    fork()返回的
    ChildProcess

  • 更好的方法是:为平台API编写本机绑定。(你在C中是怎么做的)看起来是这样的;它很旧,所以它可能会工作,也可能不会工作


  • 我觉得这是个坏主意;让操作系统调度器来做它自己的事情。至少尝试在有关联性和无关联性的情况下对整个系统的性能进行基准测试。(根据分叉进程的工作方式,您可以尝试从终端手动更改分叉PID的关联性,以便进行测试。)@josh3736,嗯,可能是这样。@josh3736,好主意。如何获取进程的PID?
    spawn()
    返回一个包含一个参数的参数。@josh3736,好的,谢谢!也许把它记下来作为答案?