我有一个主函数,作为两个子函数a()和b()。
function main() {
a();
b();
}
如何在此使用异步模块。我希望a()和b()并行运行。
答案 0 :(得分:0)
https://github.com/caolan/async#parallel
使用并行方法。
但请注意,并行在那里会产生误导。实际上,由于节点是单线程的,因此不会并行运行。会发生的是,如果函数是异步的,第一个将启动并开始自己的异步操作,然后第二个将启动,它将等待回调被调用。当两者都调用回调时,将调用async#parallel的回调。但是在async#parallel中执行同步函数是没有意义的,因为它们只是顺序运行。
Async用于IO操作,涉及对其他进程(如数据库)的请求。它允许节点执行b()函数,而a()等待对数据库的请求返回,因此它是“非阻塞”。但它不允许b()与a()同时执行指令。如果你的a()函数只是一系列同步指令,它们只会执行直到函数返回,然后只有它会检查事件循环并执行b()如果被回调调用,例如。
如果您想真正并行工作(例如使用多核处理器),请使用节点中本机提供的群集模块。它将允许您生成多个进程。但是你不应该使用它来并行执行单个函数,而是生成服务器进程的几个克隆,或者在后台执行其他进程中的繁重作业,这样它们就不会阻止你的服务器进程。