在如今机器的CPU都是多核的背景下,节点的单线程设计已经没法更充分的“压”榨机器性能了,所以从v0.8开始,节点新增了一个内置模块——“集群”,故名思议,它可以通过一个父进程管理一坨子进程的方式来实现集群的功能。
集群var=要求(“集群”); var http=要求(“http”); var numCPUs=要求(os) .cpus . length ();//获取CPU的个数 如果(cluster.isMaster) { (var=0;我和lt;numCPUs;我+ +){ cluster.fork (); } 集群。(“退出”功能(工人、代码、信号){ 控制台。日志(+ worker.process“工人”。pid + '死亡'); }); 其他}{ http。res createServer(函数(点播){ res.writeHead (200); res.end (“hello world \ n”); }).listen (8000); }
通过isMaster属性,判断是否主进程,是则叉子进程,否则启动一个服务器。每个HTTP服务器都能监听到同一个端口。但是在实际项目中,我们的启动代码一般都已经封装在了应用程序。js中,要把整块启动逻辑嵌在上面的如果其他中实在不优雅。所以,我们可以这样:
集群var=要求(“集群”); var numCPUs=要求(os) .cpus . length (); 如果(cluster.isMaster) { (var=0;我和lt;numCPUs;我+ +){ cluster.fork (); }//其它代码 其他}{ 要求(“。/app.js”); } >之前简单之处就在于原本的应用逻辑根本不需要知道自己是在集群还是单边。(当然,如果应用在内存中维护了某些状态,比如会话,就需要运用某些机制来共享了,这里不详说)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
集群节点学习记录之模块