node.js
1 2 3 4 5 6 7 8 9 10 11 | var cluster = require( 'cluster' ) var numCPUS = require( 'os' ).cpus().length if (cluster.isMaster){ //主进程代码 console.log(numCPUS) for ( var i=0;i<numCPUS;i++){ var worker = cluster.fork() } } else { require( './app.js' ) } //pm2 |
nodejs开启多进程 ps aux | grep node 查看当前运行几个nodejs进程
守护进程setsid
node.js
nodebindings add-ons
nodebindings 接入:v8 libuv的eventloop libuv的io异步事件 dns
nodebindings通过系统调用 (os operation )libuv ,会存在循环队列中,libuv会把循环队列中的回调通过事件循环放在工作线程中执行,事件循环把回调结果通过系统调用os operation返回v8,同时吧循环队列中的事件清除掉,最后再到代码
add-ons 接入:ssl http zlib解压缩
libuv的eventloop 7个阶段
1.update timer 更新系统时间 为之后timer提供计时的下标,避免过多调用影响系统性能
2.run timer 运行timer settimeout setinterval
3.pending io/callback队列 文件读取,网络io
4.idle/prepare 在内部做一些事情,如果节点状态为active状态,每次事件循环都会调用 process.nexttick
5.io/poll阶段 调用各平台提供的io多路复用接口,执行io回调,调用循环队列中的事件,如果poll队列不为空,将会递归遍历事件循环同步执行callback队列,直到队列为空,如果poll队列为空,有setimmedate会立即进入,等待callback添加到队列中,然后立即执行,有超时timmer会回到timmer
6.check阶段 setimmediate
7.close callbacks 关闭io 连接断开,文件描述符的关闭
Node.js 中的事件循环与浏览器中的事件循环在某些方面有一些重要的差异:
-
EventEmitter vs. Web APIs:
- Node.js: Node.js 中使用
EventEmitter
来实现事件触发与监听,其核心是通过事件驱动的方式进行异步编程。 - 浏览器: 浏览器中的事件循环依赖于 Web APIs,包括 DOM 事件、定时器、Ajax 等。
- Node.js: Node.js 中使用
-
宏任务和微任务的差异:
- Node.js: Node.js 中宏任务主要包括事件循环的不同阶段,例如 timers、I/O callbacks、idle、poll 等。微任务主要包括
process.nextTick
和Promise
的回调。 - 浏览器: 浏览器中宏任务包括整体的 script 执行、I/O 操作、渲染等,微任务包括
Promise
的回调、MutationObserver
的回调等。
- Node.js: Node.js 中宏任务主要包括事件循环的不同阶段,例如 timers、I/O callbacks、idle、poll 等。微任务主要包括
-
setImmediate 和 process.nextTick:
- Node.js:
process.nextTick
在事件循环的当前阶段执行,优先级高于微任务。setImmediate
则在事件循环的下一次迭代执行。 - 浏览器: 浏览器没有
setImmediate
,而是使用setTimeout(fn, 0)
来实现类似的效果。
- Node.js:
-
I/O 操作的处理:
- Node.js: Node.js 通过 libuv 提供了异步非阻塞的 I/O 操作,这使得 Node.js 能够高效地处理大量并发请求。
- 浏览器: 浏览器中的异步操作主要涉及到 Web APIs,如 XMLHttpRequest、Fetch API,以及其他与 DOM 交互的操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!