cron 作业会阻塞主进程还是 nodejs 会创建一个工作程序来执行 cron 任务

Vo *_*ang 7 cron process backgroundworker node.js cron-task

我每分钟都在使用node-cron做一些繁重的任务(更新数据库)。这个任务是使用主进程来工作还是 nodejs 会创建一些工人来完成这些任务?

var CronJob = require('cron').CronJob;
new CronJob('0 * * * * *', function() {
  //Update database every minute here
  console.log('Update database every minute');
}, null, true, 'America/Los_Angeles');
Run Code Online (Sandbox Code Playgroud)

Ork*_*zen 5

任何阻塞操作确实都会阻塞主线程,至少对于node-cron来说是这样。

我尝试过使用expressjs应用程序,其中cron作业尝试定期从网络获取数据:

// app.js
...

/* Routes */

app.use("/", valueRoutes);

/* Cron Job */

cron.schedule(CRON_EXP, refreshData); // long running asyn operation

export default app;
Run Code Online (Sandbox Code Playgroud)

refreshData方法执行期间,express应用程序无法响应请求。


小智 1

它应该为您创建一个工作程序。库文档中没有很好地记录它,但是:1)您可以在依赖项中看到,它依赖于节点工作程序。2) 如果 cron 作业是阻塞的,那么等待 cron 作业执行的时间(在本例中是一分钟)也将是阻塞的。这是因为主线程只会等待,直到它必须执行此操作。在这种情况下,它不会是 cron 作业,因为它将是一个简单的 sleep() 然后执行。

不过,如果您想确定的话,请尝试使用“while true”执行nodejs主程序,并且在内部可能会向控制台写入一些内容。并创建一个 cronjob,每分钟它都会在您希望的时间执行 sleep() 命令。预期的症状是控制台中的写入永远不会停止..

希望这有帮助..干杯