# 进程
# 服务器的模型变迁
同步
-- 所有请求都得按次序等待服务复制进程
-- 每一个连接都需要一个进程来服务多线程
-- 一个线程服务一个请求,相对线程开销比较小 (C10K问题)事件驱动
-- 所有的处理都在单线程上进行,影响事件驱动服务模型性能的点在于cpu的算力 代表node
、nginx
# 多进程架构
# 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
事件实现收听子进程发来数据
# 负载均衡
- 在多进程之间监听相同的端口,使得用户请求能够分散到多个进程上进行处理。