玩转node进程

(1)服务器模型

如何利用多核cpu服务器?
多线程:线程相对进程开销小,并且线程之间可以共享数据,且利用线程池可以减少创建和销毁线程的开销,时间片可以让线程较为均匀的使用cpu资源,线程数量过多时,事件会被浪费在上下文切换中。
事件驱动:node和nginx都是事件驱动的
事件驱动服务器的问题: cpu的利用率和进程的健壮性

(2)多进程架构

单进程 单线程 对多核使用不足的问题,创建进程,每个进程必须占用独立的cpu,以解决cpu占用不足的问题。
Master-Worker模式(主从模式):分布式架构用于并行处理业务的模式,具备较好的可伸缩性和稳定性,主进程不负责具体的业务处理,而是负责调度和管理工作进程。

const child_process = require('child_process');
const cpus = require('os').cpus();
const fork = child_process.fork;

console.log(cpus.length);    // 4个cpu  开启4个工作
for(var i=0; i<cpus.length; i++) {
fork('./process_child');
}

通过fork复制的进程都是一个独立的进程,这个进程中有着独立而全新的v8实例,需要30ms的启动时间和10M的内存,所以fork是昂贵的。
尽量用事件驱动方式在单线程上解决高并发。

1)创建子进程

类型 回调/异常(获知子进程的状态) 进程类型 执行类型 可设置超时
spawn N 任意 命令 N
exec Y 任意 命令 Y
execFile Y 任意 可执行文件 Y
fork N Node js文件 N
linux中如果用execFile执行js文件,必须在shell文件 添加如下代码:
#!/usr/bin/env node

2)进程间通信

前端浏览器中,js主线程与UI共用一个线程,WebWorker允许创建工作线程在后台运行,使得阻塞严重的计算不影响UI渲染。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值