# 进程

# 服务器的模型变迁

  1. 同步 -- 所有请求都得按次序等待服务
  2. 复制进程 -- 每一个连接都需要一个进程来服务
  3. 多线程 -- 一个线程服务一个请求,相对线程开销比较小 (C10K问题)
  4. 事件驱动 -- 所有的处理都在单线程上进行,影响事件驱动服务模型性能的点在于cpu的算力 代表 nodenginx

# 多进程架构

# child_process模块

# child_process.fork()实现进程复制 Master-Worker 模式

  • 启动多个进程只是为了充分将CPU资源利用起来,而不是为了解决并发问题

  • worker.js

var http = require('http')
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'})
  res.end('Hello World\n')
}).listen(Math.round((1 + Math.random()) * 1000), '127.0.0.1')
// 将会侦听1000到2000之间的一个随机端口
  • master.js
var fork = require('child_process').fork
var cups = require('os').cpus()
for (var i = 0; i < cpus.length; i++ ) {
  fork('./worker.js')
}
ps aux | grep worker.js

# 进程通信

  • 主进程和工作线程之间通过 onmessage()postMessage()
  • 子进程对象则由send()方法实现主进程向子进程发送数据,message事件实现收听子进程发来数据

# 负载均衡

  • 在多进程之间监听相同的端口,使得用户请求能够分散到多个进程上进行处理。
上次更新时间: 2019-12-24 2:17:04 PM