当前位置: 首页 > 面试题库 >

node.js子进程-生成和派生之间的区别

哈栋
2023-03-14
问题内容

这似乎是一个基本问题,但是我找不到任何文档:

分叉和生成node.js进程有什么区别?我已经读过分叉是生成的一种特殊情况,但是使用它们的不同用例/重用分别是什么?


问题答案:

Spawn是用于运行系统命令的命令。运行spawn时,会向其发送系统命令,该命令将在其自己的进程上运行,但不会在节点进程内执行任何其他代码。您可以为生成的进程添加侦听器,以允许您的代码与生成的进程进行交互,但是不会创建新的V8实例(除非您的命令是另一个Node命令,但是在这种情况下,您应该使用fork!)和您的节点模块只有一个副本在处理器上处于活动状态。

Fork是spawn的特殊实例,它运行V8引擎的新实例。这意味着,您实际上可以创建多个工作程序,它们在完全相同的Node代码库上运行,或者为特定任务运行在不同的模块上。这对于创建工作池最有用。尽管节点的异步事件模型允许相当高效地使用机器的单个核心,但它不允许节点进程使用多核心机器。完成此操作的最简单方法是在单个处理器上运行同一程序的多个副本。

一个好的经验法则是每个内核一到两个节点进程,对于具有良好的内存时钟/ cpu时钟比率的机器,或者对于I /
O繁重而CPU工作量不大的节点进程,则可能更多,以最大程度地减少事件的停机时间。循环正在等待新事件。但是,后一种建议是微优化,因此需要仔细进行基准测试,以确保您的情况适合许多流程/核心的需求。实际上,通过为您的机器/方案生成过多的工作程序,实际上可以降低性能。

最终,您可以通过发送spawn一个Node命令,以上述方式使用spawn。但这是愚蠢的,因为fork做了一些事情来优化创建V8实例的过程。只需说清楚,最终生成就包含了fork。对于这种特殊且非常有用的用例,Fork才是最佳选择。

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



 类似资料:
  • 问题内容: 我正在尝试调试使用以下方法创建的子Node.JS进程: 问题是,在IntelliJ / WebStorm中运行时,父进程和子进程都在同一端口上启动。 因此,它仅调试父进程。 有什么方法可以设置IntelliJ来调试子进程或强制其在其他端口上启动,以便我可以在远程调试中进行连接? 问题答案: 这是node.js中一个已知的错误,该错误最近已得到修复(尽管未反向移植到v0.10)。 有关更

  • 我在将包含RSA公钥的字符串转换为java.security公钥类型时遇到了麻烦,该RSA公钥是我在cygwin中使用SSh-keygen生成的。 那么,我假设我的问题是两个密钥之间有什么区别,以及我如何才能成功地将第一个转换为可用的PublicKey对象?

  • 我是Prisma的新手,我喜欢使用它。 显然,我一直在使用MySQL开发目的创建演示服务器。然而,当我尝试更新prisma.yml文件以生成Prisma图ql模式文件时,我发现有几种方法可以做到这一点。 首先,在yml文件中使用属性,如下所示: 第二种方法是使用hook方法: 因此,我在想,这两种方法中哪一种更适合goto方法,这两种方法的不同用例是什么? 成果 在使用generate方法时,我注

  • 问题内容: 我有一个PhantomJS / CasperJS脚本,它是使用node.js脚本运行的。由于CasperJS不支持ing模块,因此我试图将CasperJS中的命令打印到,然后使用来从我的node.js脚本中读取它们,以执行将对象添加到redis / mongoose的操作(复杂,是的,但是看起来比为此设置Web服务更简单。。。)CasperJS脚本执行一系列命令,并创建例如20个屏幕截

  • 问题内容: 迭代器和生成器有什么区别?有关何时使用每种情况的一些示例会有所帮助。 问题答案: 是一个更笼统的概念:其类具有next方法(在Python 3中)和具有方法的任何对象。 每个生成器都是一个迭代器,但反之亦然。生成器是通过调用具有一个或多个yield表达式(yield在Python 2.5及更早版本中为语句)的函数而构建的,并且该函数是满足上一段对的定义的对象。 当你需要一个具有某些复杂

  • 今天,PHP团队发布了PHP5.5。0版本,其中包括对生成器的支持。在阅读文档时,我注意到它所能做的正是使用数组所能做的。 PHP团队生成器示例: 结果: 但是我可以用数组做同样的事情。我仍然可以与早期版本的PHP保持兼容。 看一看: 那么问题来了:这个新功能存在的目的是什么?我得发挥所有的例子留档不使用新功能,用数组取代它。 有人能给出一个很好的解释,也许是一个例子,在旧版本中不一定是不可能的,