下面的express程序可以看出nodejs单线程的缺陷,当访问主页面localhost:3000时,doWork(5000)方法会暂停5秒钟。
由于长时间的等待时间会使得node陷入到停顿的状态。当其他的请求来的时候,也只能够等待。例如当访问后立即访问localhost:3000/fast,只能够等待一段时间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const express = require('express'); const app = express(); function doWork(duration){ const start = Date.now(); while(Date.now()-start<duration){} } app.get('/',(req,res)=>{ doWork(5000); res.send("i like jonson") }) app.get('/fast',(req,res)=>{ res.send("i like jonson") }) app.listen(3000); |
cluster多线程node增强node表现
使用nodejs内置的cluster module可以让多个node实例同时运行,管理多个node实例。
cluster管理多个node实例。cluster manager实例与child实例都会调用此文件中的代码。
通过cluster.isMaster将两者区分开。
cluster manager 中cluster.isMaster为true。
child实例实例中