进程间通信

640?wx_fmt=png


在Master-Worker模式中,要实现主进程管理和调度工作进程的功能,需要主进程和工作进程之间的通信。对于 child_process 模块,创建好了子进程,然后与父子进程间通信是十分容易的。


在前端浏览器中,JavaScript主线程与UI渲染共用同一个线程。执行JavaScript的时候UI渲染是停滞的,渲染UI时,JavaScript是停滞的,两者互相阻塞。长时间执行JavaScript将会造成UI停顿不响应。


为了解决这个问题,HTML5提出了WebWorker API。WebWorker允许创建工作线程并在后台运行,使得一些阻塞较为严重的计算不影响主线程上的UI渲染。


主线程与工作线程之间通过 onmessage() 和 postMessage() 进行通信,子进程对象则由 send() 方法实现主进程向子进程发送数据, message 事件实现收听子进程发来的数据,与API在一定程度上相似。通过消息传递内容,而不是共享或直接操作相关资源,这是较为轻量和无依赖的做法。Node中对应示例如下所示:


 
 
// parent.js	
var cp = require('child_process');	
var n = cp.fork(__dirname + '/sub.js');	
n.on('message', function (m) {	
  console.log('PARENT got message:', m);	
});	
n.send({ hello: 'world' });	
// sub.js	
process.on('message', function (m) {	
  console.log('CHILD got message:', m);	
});	
process.send({ foo: 'bar' });



通过 fork() 或者其他API,创建子进程之后,为了实现父子进程之间的通信,父进程与子进程之间将会创建IPC通道。通过IPC通道,父子进程之间才能通过 message 和 send() 传递消息。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值