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 中的事件循环与浏览器中的事件循环在某些方面有一些重要的差异:

  1. EventEmitter vs. Web APIs:

    • Node.js: Node.js 中使用 EventEmitter 来实现事件触发与监听,其核心是通过事件驱动的方式进行异步编程。
    • 浏览器: 浏览器中的事件循环依赖于 Web APIs,包括 DOM 事件、定时器、Ajax 等。
  2. 宏任务和微任务的差异:

    • Node.js: Node.js 中宏任务主要包括事件循环的不同阶段,例如 timers、I/O callbacks、idle、poll 等。微任务主要包括 process.nextTickPromise 的回调。
    • 浏览器: 浏览器中宏任务包括整体的 script 执行、I/O 操作、渲染等,微任务包括 Promise 的回调、MutationObserver 的回调等。
  3. setImmediate 和 process.nextTick:

    • Node.js: process.nextTick 在事件循环的当前阶段执行,优先级高于微任务。setImmediate 则在事件循环的下一次迭代执行。
    • 浏览器: 浏览器没有 setImmediate,而是使用 setTimeout(fn, 0) 来实现类似的效果。
  4. I/O 操作的处理:

    • Node.js: Node.js 通过 libuv 提供了异步非阻塞的 I/O 操作,这使得 Node.js 能够高效地处理大量并发请求。
    • 浏览器: 浏览器中的异步操作主要涉及到 Web APIs,如 XMLHttpRequest、Fetch API,以及其他与 DOM 交互的操作。
posted @   国服第一李师师  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示