JS是单线程语言,减少了线程间切换的开销,且不用考虑锁的问题,因此适合IO密集型项目。
JS的单线程,其实指的是js主引擎线程的。除此之外还有定时器线程、异步http线程(ajax)等,最终通过Event Loop协调执行。
为了充分利用多核CPU,可以使用worker_threads
实现多线程,child_process
或cluster
实现多进程(master-worker模式)。
worker_threads
不同于浏览器中的web worker
,nodejs中通过worker_threads
实现多线程。通常在计算密集型场景中,才需要使用NodeJs多线程,因此使用场景较少。
child_process
electron中即经常使用该模块。
- exec、execSync
执行shell命令 - execFile、execFileSync
执行外部应用 - spawn、spawnSync
执行外部应用,并输出流 - fork
执行Node应用,父子进程间存在IPC通道收发消息- 在子进程中:
process.on('message') + process.send() - 在父进程中:
child.on('message') + child.send()
- 在子进程中:
cluster
cluster 封装了 child_process.fork ,并内置了负载均衡,可有效实现多进程。
定时任务
- node-schedule
- node-cron
- cron
网友评论