- 6
- 0
- 约2.32千字
- 约 13页
- 2016-08-12 发布于湖北
- 举报
Node.js多核利用模块cluster
辅助均衡
回顾Node内置的cluster模块
Node.js固有的单线程模型经常被认为是它的一个软肋。不管你的机器上有多少CPU内核,Node.js能用上的也仅仅是其中之一(某些操作会被有条件地卸载到线程池中。大多数程序只是在CPU的总时间上分了一杯羹,所以更好地利用可用的处理能力并不能起到多大作用)。
所以Node.js从v0.8开始,新增加了一个内置的‘cluster’模块。你可以用cluster模块设置一个主进程作为管理者,由一或多个工人进程完成实际工作。
cluster模块最神奇之处在于所有工人线程都可以绑定到相同的请求处理端口和地址上。另外,它可以确保接进来的连接会被均匀地分配给监听着的工人线程...最起码理论上是这样的。
用现实检验理论
从操作系统的角度来看这是可以理解的:上下文切换(挂起一个进程,然后重新激活另一个)是相当昂贵的操作。如果你有n个进程全都等在同一个socket上,那么唤醒最近被阻塞的进程是明智之举,因为那样可以最大限度地避免上下文切换。(当然,调度器是一种复杂而又多变的野兽;上面只是对真实情况泛泛的解释。基本前提是那些得到优待的进程会仍然受到优待)。
Node.js v0.8和v0.10中分配连接的算法很简单。当工人进程调用http.Server#listen()或net.Server#listen()时,N
原创力文档

文档评论(0)