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

node.js进程如何知道何时停止?

沈思博
2023-03-14
问题内容

由于许多node.js脚本遵循异步执行模式(以下示例),因此它们如何知道何时停止?

在以下代码中,节点如何确定在处理writeFile和适当注册回调之后,在回调运行之前,该进程应保持活动状态?

fs = require('fs');

fs.writeFile('foo', 'cat', function() {
  console.log('wrote to foo!'); 
  fs.readFile('foo', 'utf8', function(err, data) {
    console.log(data);
  });
});

问题答案:

节点跟踪所有未完成的工作请求。您的fs.writefile()调用为I / O创建工作请求,并将您的回调添加到该请求。节点在启动I /
O活动的同时将工作请求保存到其表中。到达函数末尾时,代码执行将退出。(但您的内存/变量/等仍然存在)

稍后,I / O完成,并且节点将工作请求从表中取出。它看到附加到请求的回调,因此使用I /
O请求的结果调用该函数。您的全局数据仍然存在,并且闭包中的任何变量仍然存在,因此在您的代码中似乎从未停止过。

如果您什么也不做,不要再发出任何请求,那么当您从函数返回时,节点将停止,因为这样队列中将不再有任何剩余的请求。

因此,节点“知道”继续运行,因为它跟踪其表中的活动工作请求,并且直到所有排队的工作都完成并且这些表为空时才会停止。

请注意,“排队工作”可能包括诸如等待计时器或等待网络数据到达之类的事情。您发出一个请求,要求您说“如果以后有事请给我打电话”。

setTimeout()也是一个工作请求(如果您斜视一下)。使用计时器,您知道会发生什么以及何时发生。使用setTimeout()只会发生一个“事情”。节点将仅对您的回调进行一次调用,然后“忘记”工作请求。相反,如果您使用setInterval(),则创建了一个持久性工作请求。节点将“保留”其表中的工作请求,并将反复调用回调,直到您取消该请求为止。

net.Server.listen()是另一个工作请求,它是一个持久性工作请求。您不知道何时调用回调或调用多少次,因为这取决于连接到服务器的远程客户端。节点将工作请求保持在其表中,直到您取消该请求为止。



 类似资料:
  • 问题内容: 我有一个单一的线程生产者,它创建了一些任务对象,然后将它们添加到一个(大小固定的)对象中。 我还启动了一个多线程使用者。这是作为固定线程池()构建的。然后,我向该threadPool提交一些ConsumerWorker实例,每个ConsumerWorker都引用了上述ArrayBlockingQueue实例。 每个这样的Worker将在队列中执行并处理任务。 我的问题是,什么时候不再需

  • 问题内容: 如何在Linux和Windows中正常停止Java进程? 什么时候被调用,什么时候不被调用? 终结器又如何呢? 我可以从外壳向Java进程发送某种信号吗? 我正在寻找最好的便携式解决方案。 问题答案: 在所有未强制终止VM的情况下,都会执行关机挂钩。因此,如果要发出“标准” kill(通过kill命令),则它们将执行。同样,它们将在调用后执行。 但是,如果将其强行杀死(),它们将不会执

  • 问题内容: 现在,我使用一个静态布尔值来告诉初始化何时发生。有没有更简单的方法知道我已经调用了initialize? 谢谢!!! 解决了!!!!非常感谢您的评论。您需要在扩展应用程序的类中初始化解析,然后将其作为应用程序(而不是其他活动)添加到清单文件中。 :) 这是我使用Parse的课程: 这是我的android清单文件 问题答案: 创建一个应用程序类,然后在onCreate中初始化解析。 在此

  • 我正在运行一些应用程序,其中应用程序必须知道它在PODMAN内部运行,没有任何额外的env变量,但容器中的PODMAN配置必须提供细节,而没有任何用户交互。 现在,我正在使用cat容器内部开始使用podman检查进程是否在容器内部。 有没有更好的方法来处理同样的问题?

  • 当失去焦点时,我需要捕捉,我搜索了其他问题,但没有找到答案。 我这样使用 但是,这对我不起作用。

  • 问题内容: 我正在寻找我的Linux内核的时间片(或量子)的值。 具体问题: 是否存在公开此类信息的文件? (或者)在我的发行版的Linux标头中是否定义明确? (或者)是否存在公开此值的Linux API的C函数(也许是sysinfo)? 问题答案: 分配给特定过程的数量可能有所不同: 您可以通过调整 sched_latency_ns 和 sched_min_granularity_ns 来调整