【问题标题】:Executing potentially expensive tasks执行可能代价高昂的任务
【发布时间】:2012-02-26 16:00:47
【问题描述】:

我有一个 nodejs tcp 服务器来处理许多子服务器的状态,当发生某些事情时,状态服务器会告诉子服务器执行一个操作,这可能会很昂贵,大多数情况下会非常昂贵(大约一分钟),在某些情况下,它会在几秒钟内完成。

由于子服务器正在执行的操作(侦听 websocket 并非常频繁地来回传递大量数据),我无法承受子服务器在执行这项昂贵任务时停顿的情况。

显然 nodejs 没有能力产生新的线程,没有一些混乱的实现。是否值得产生一个新进程来执行这个可能很昂贵的任务,我可以通过从父服务器发送的命令来确定它什么时候会很昂贵。

【问题讨论】:

  • 难道不能使用消息队列并创建几个工作进程来代替吗?

标签: multithreading node.js process


【解决方案1】:

Node.js 确实具有生成其他进程的能力,并且可以很好地处理它们。查看 node.js 文档中的 child_processes,特别是 fork 命令,它允许您生成其他 node.js 作业并通过消息通道与它们通信。

Node.js Child Processes Node.js Fork

http://nodejs.org/docs/latest/api/child_processes.html#child_process.fork

【讨论】:

  • 正如文档所说:“这些子节点仍然是 V8 的全新实例。假设每个新节点至少需要 30 毫秒的启动时间和 10 mb 的内存。也就是说,你不能创建成千上万个。”你不能创建很多这些。但如果你不产生那么多进程,它可能会起作用。
  • 对。如果它是问题中的一项昂贵的操作,那么无论如何您都不应该产生许多这样的进程。
  • 看来产卵进程会比让它在父进程中进行更昂贵,我想我找到了答案,谢谢。
  • 只要您不介意父进程在任务期间被阻塞。请记住,在漫长的过程完成之前,他们将无法处理任何其他传入请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多