【问题标题】:Node.js child_process.fork() to run on different CPU coresNode.js child_process.fork() 在不同的 CPU 内核上运行
【发布时间】:2013-08-09 00:30:06
【问题描述】:

我有一个运行长时间执行进程的应用程序。为了让它更快,我对数据进行了简单的分片,并希望并行运行它们,只需 .fork() 相同应用程序的 2 个实例。

我在那里有 2 个核心机器,并希望确保使用 2 个核心,并且第一个实例在第一个核心上运行,第二个在第二个核心上运行。

我知道cluster 模块,但在这种情况下似乎不相关,因为我不需要运行 HTTP 服务并在它们之间进行负载平衡。只是工作人员(意思是,他们不需要相互通信、发送消息或其他任何东西——他们只需执行 HTTP 请求并将数据存储到数据库中)。

是否有可能控制 node.js 进程占用哪个 CPU 内核?如何在 Mac/Linux 上监控?

【问题讨论】:

  • 你可以查看这个话题:stackoverflow.com/questions/663958/…
  • 我不认为你可以编写一个线程来运行一个 CPU 内核。这将妨碍操作系统,因为它无法进行上下文切换,因此无法进行多任务处理。这样的决定最好留给操作系统。
  • 谷歌“cpu 亲和力”。虽然它不是特定于节点的,但不同的操作系统会有所不同。另外,从我自己的谷歌搜索看来,在 Mac 上这样做可能会降低性能,因为内核不再能够智能地管理缓存关联性。

标签: node.js fork multiprocessing


【解决方案1】:

集群模块正是您所需要的:http://nodejs.org/api/cluster.html

【讨论】:

    【解决方案2】:

    您想要这个,它是集群 API 的特定部分:

    cluster.setupMaster([settings])
    

    https://nodejs.org/api/cluster.html#cluster_cluster_setupmaster_settings

    我还编写了一个模块来执行此操作,并且有几个:

    https://www.npmjs.com/package/poolio

    我的模块运行良好,但 API 不是那么简单,所以我建议使用核心模块

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2014-06-13
      • 2022-09-29
      相关资源
      最近更新 更多