1.宏观任务(macro task): 由宿主(node、浏览器) 发起的任务,如setTimeOut、setInterval、setImmediate、I/O
2.微观任务(micro task):由 js引擎 发起的任务,如process.nextTick、promise、mutationObserver
JS是单线程语言,减少了线程间切换的开销,且不用考虑锁的问题,因此适合IO密集型项目。JS的单线程,其实指的是js主引擎线程的。除此之外还有定时器线程、异步http线程(ajax)等,最终通过Event Loop协调执行。
为了充分利用多核CPU,可以使用 worker_threads 实现多线程, child_process 或 cluster 实现多进程(master-worker模式)。
不同于浏览器中的 web worker ,nodejs中通过 worker_threads 实现多线程。通常在计算密集型场景中,才需要使用NodeJs多线程,因此使用场景较少。
electron中即经常使用该模块。
cluster 封装了 child_process.fork ,并内置了负载均衡,可有效实现多进程。