一个应用至少包含一个进程,一个进程至少包含一个线程。进程(Process)是计算机中程序在一定数据集上的运行活动。它是系统进行资源分配和调度的基本单位。线程(Thread)是操作系统能够进行计算调度的最小单位。它包含在流程中,是流程中的实际操作单元。Node的特点:主线程是单进程(后来版本出现线程概念,开销比较大);基于事件驱动,异步非阻塞I/O;可用于高并发场景。nodejs原来的版本没有实现多线程。为了充分利用多核cpu,可以使用子进程来实现内核负载均衡。node需要解决的问题:node在做耗时计算时,会造成阻塞。如何在node中启动子进程在开发过程中如何实现进程守护的概念太多了。下面我们从一个具体的案例开始,看看单线程会带来哪些问题。单线程的缺点//file:question.jsconsthttp=require('http');http.createServer((req,res)=>{if(req.url==='/sum'){//sumvarendTime=newDate().getTime()+10000while(newDate().getTime(){if(req.url==='/sum'){//sum//varendTime=newDate().getTime()+10000//while(newDate().getTime(){res.end(process.pid+'','pid');}).listen(3000);console.log("serverstart",process.pid);}申诉代码有点反人类,但是在c++中也有这样的操作过程。另一种方式//fileconstcluster=require('cluster');constcpus=require('os').cpus();//入口文件cluster.setupMaster({exec:require('path').resolve(__dirname,'worker/cluster.js'),});cluster.on('exit',function(worker){console.log(worker.process.pid);cluster.fork();//启动一个进程})for(leti=0;i{if(Math.random()>0.5){SDSADADSSA();}//在集群环境下,可以监听同一个端口号res.end(process.pid+':'+'结束')}).listen(3000);pm2applicationpm2可以将你的应用部署到服务器的所有CPU上,实现多进程管理、监控、负载均衡安装pm2npminstallpm2-g#安装pm2pm2startserver.js--watch-imax#启动进程pm2list#显示进程状态pm2kill#杀死所有进程pm2startnpm--rundev#启动npm脚本pm2配置文件pm2生态配置项目自动部署module.exports={apps:[{name:'my-project',script:'server.js',//选项参考:https://pm2.io/doc/en/runtime/reference/ecosystem-file/args:'onetwo',instances:2,autorestart:true,watch:false,max_memory_restart:'1G',env:{NODE_ENV:'development'},env_production:{NODE_ENV:'production'}}],deploy:{production:{user:'root',host:'39.106.14.146',ref:'origin/master',repo:'https://github.com/wakeupmypig/pm2-deploy.git',路径:'/home','post-deploy':'npminstall&&pm2reloadecosystem.config.js--envproduction'}}};pm2deployecosystem.config。jsproductionsetup#执行gitclonepm2deployecosystem.config.jsproduction#启动pm2文章来源:Biaofun标梵互动(https://www.biaofun.com/)