Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

node 自带的 IPC 慢成狗

  node 自带 IPC 这件事本身是极好的,如果不考虑性能的话确实非常方便。可一旦需要性能,这就是个坑点了。最近开发的一个项目最初设计时本来是打算通过 IPC 来维持 Worker 和主进程之间的通信的,后来经过一些性能测试后放弃了 IPC 的方案,改用了 Socket。
  下面是一个性能测试的代码片段:
let cluster = require('cluster'); if (cluster.isMaster) { let worker = cluster.fork(); void function callee() { let message = new Buffer(1024 * 512) + ''; let len = message.length.toLocaleString(); console.log('\x1b[1;32msend \x1b[1m' + len + ' chars\x1b[0m'); worker.send(message); setTimeout(callee, 16); }(0); } else { process.on('message', message => { let len = message.length.toLocaleString(); console.log('\x1b[1;35mrecv \x1b[1m' + len + ' chars\x1b[0m'); }); }   这个代码是主进程通过自带的 IPC 给子进程大量数据包,由于 send 是异步执行的,所以总是发送成功。但子进程的接收却很慢,message 事件很久才触发一次。

  而且由于接收慢,这还会导致主进程 send 的内容全部堆积在了自己的内存中,给程序埋下一颗定时炸弹。
网名:
54.161.77.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^