在nodejs中实现CPU绑定任务的方法

时间:2012-05-30 11:02:40

标签: node.js web-worker child-process fibers

我使用nodejs作为Web服务器,它解码GET参数并以某种编码格式返回数据。使用nodejs的加密模块完成解码/编码,这似乎是同步的。虽然服务单个请求所花费的时间足够快,但阻止事件循环使得服务在并发性方面表现不佳。

我的要求很简单,在事件循环之外制作编码/解码功能。

  1. 单独进程(child_process或cluster)
  2. 这可以是仅用于此目的的单独进程,但由于编码/解码将在子进程中阻塞,这将阻止子进程接收新消息,即永远不会出现编码两个字符串的情况因为子进程也是单线程的。

    1. 每个请求的单独线程(threads-a-gogo或fiber或node-webworker)
    2. 为每个请求创建一个单独的线程来执行编码/解码操作,但是没有一个模块似乎按预期工作,即线程-a-gogo不能通过npm安装,光纤没有创建单独的线程在run(),node-webworker not working上。

      是否有人遇到类似的问题,或者是否有某种方法可以通过简单的消息传递在nodejs中轻松创建线程。

1 个答案:

答案 0 :(得分:1)

这内置于节点的子进程中。文档:

http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle

您也可以使用群集:

http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

使用群集,它可以像:

if (cluster.isMaster) {
  var worker = cluster.fork();
  worker.send('encodeThisString');

} else if (cluster.isWorker) {
  process.on('message', function(msg) {
    var encrypted = crypto.doSomeEncryption(msg);
    process.send(encrypted);
  });
}