概述
在其他语言中,实现多进程或多线程是非常容易的事情,而对于一个node实例,它是单线程进行工作,不过,node仍能实现多进程工作,在读写方面会比单进程效率会提升很多。
在我自己的测试中,读写20000多个文件,共计2G 的数据,不使用多进程的话,需要3分钟左右的时间,而使用了cluster,40秒左右便完成了读写。
cluster简介
cluster模块可以创建共享服务器端口的子进程,主要是利用处理器多核系统,让子进程处理负载任务,简单来说,主进程通过cluster将任务分发给子进程,让多个任务并发执行,这在读写过程中非常适用。
cluster其底层是通过child_process实现的,详细的参考这篇文章
代码简单结构
代码逻辑:
- 主进程循环创建子进程,并向每一个子进程发送变量
- 子进程收到变量进行相关操作,执行完成后,向主进程发送信息,表示完成
- 主进程收到子进程的信息,执行关闭子进程操作,并输出 进程xx结束
- 所有子进程关闭,代码执行完毕。
var cluster = require("cluster");
// 获取当前处理器的核数
var numCPUs = require("os").cpus