nodejs 如何开启一个进程,进程之间如何通讯

进程 process 和线程 thread

进程,是操作系统进行资源调度和分配的基本单位,每个进程都拥有自己独立的内存区域(参考“堆栈模型”)。
一个进程无法直接访问另一个进程的内存数据,除非通过合法的进程通讯。

执行一个 nodejs 文件,即开启了一个进程,可以通过 process.pid 查看进程 id 。

线程,是操作系统进行运算调度的最小单位,线程是附属于进程的。一个进程可以包含多个线程(至少一个),多线程之间可共用进程的内存数据。

如操作系统是一个工厂,进程就是一个车间,线程就是一个一个的工人。

JS 是单线程的,即执行 JS 时启动一个进程(如 JS 引擎,nodejs 等),然后其中再开启一个线程来执行。

虽然单线程,JS 是基于事件驱动的,它不会阻塞执行,适合高并发的场景。

为何需要多进程

现代服务器都是多核 CPU ,适合同时处理多进程。即,一个进程无法充分利用 CPU 性能,进程数要等于 CPU 核数。

服务器一般内存比较大,但操作系统对于一个进程的内存分配是有上限的(2G),所以多进程才能充分利用服务器内存。

nodejs 开启多进程

child_process.fork 可开启子进程执行单独的计算(源码参考 process-fork.js)

  • fork('xxx.js') 开启一个子进程
  • 使用 send 发送信息,使用 on 接收信息

cluster.fork 可针对当前代码,开启多个进程来执行(源码参考 cluster.js)

答案

  • 可使用 child_process.forkcluster.fork 开启子进程
  • 使用 send on 传递消息

扩展:使用 PM2

nodejs 服务开启多进程、进程守护,可使用 pm2 ,不需要自己写。代码参考 koa2-code

  • 全局安装 pm2 yarn global add pm2
  • 增加 pm2 配置文件
  • 修改 package.json scripts
Process-watcher 能够启动和控制 NodeJS 进程的工具。代码示例:var watcher = require('process-watcher'); /*  * Dummy metric monitoring object.  */ var watcher_metric = {     /**      * Increments metric      */     increment : function (name, v) {         // Add implementation as necessary     },     /**      * Set the metric or multiple metrics at the same time.      * */     set : function (names, v) {         // Add implementation as necessary     } }; var dgpath = '/tmp/watcher_test_dgram',     statusPath = '/tmp/watcher_status_path_test',     watcher_config = { max_inactive : 0.001, monitor : 0.001,  monPath: dgpath,         timeout : 30, timeout_start : 60 }; //Instantiate watcher var watcher_instance = new watcher.Watcher({ metric : watcher_metric, config : watcher_config }); 标签:Process 分享 window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": [], "bdPic": "", "bdStyle": "1", "bdSize": "24" }, "share": {} }; with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' ~(-new Date() / 36e5)];\r\n \r\n \r\n \r\n \r\n \u8f6f\u4ef6\u9996\u9875\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nwindow.changyan.api.config({\r\nappid: 'cysXjLKDf', conf: 'prod_33c27aefa42004c9b2c12a759c851039' });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值