问一个关于 nodejs CPU 核心利用的问题

humbass · 2024-9-18 18:59:05 · 141 次点击
经常被问到 nodejs 写的程序 cpu 利用率的问题

例如建立一个 TCP Serfer ,做一些数据处理,简单 demo 大约像下面这样。

问题:假设服务器是 4 核

- 在没有使用 pm2 等第三方模块情况下直接启动,最多用到了几个核?
- 是否要显式的使用 cluster 模块,才真正用到多核 ?


```js
const net = require('net')

const serfer = net.createSerfer()

serfer.on('connection', (socket) => {
  socket.on('data', (data) => {
    // 这里做一些任务处理
  })
})

serfer.listen(3000, '0.0.0.0')
```
举报· 141 次点击
登录 注册 站外分享
9 条回复  
hiqxy 小成 2024-9-18 19:13:51
一个进程只能单核把
ntedshen 小成 2024-9-18 19:44:41
现跑一个不就完了。。。
ab -n1000000 -c100 -t20 --lantency "http://127.0.0.1:3000/"
一个
skallz 小成 2024-9-18 20:01:16
@hiqxy 那线程池是干啥用的。。。多线程就已经能利用多核了
Zhuzhuchenyan 小成 2024-9-18 21:19:19
取决于你的多核语境是以下哪一个

1.任务处理是否用到了多核

serfer.on('connection', (socket) => {
  socket.on('data', (data) => {
    //① 这里做一些任务处理
  })
})

对于①处代码,除非显示调用其他相关的库,否则就是单纯的单线程执行

2. 整个程序是否用到了多核

node.js 内部依赖 libuv 来做网络链接相关的事情,libuv 内部维护一个线程池来处理文件、网络调用。线程池上的线程基本上可以认为会在多核上均匀调度。
Trim21 小成 2024-9-18 22:10:20
@skallz #3 这是在 nodejs 语境下的说法,况且 op 也没用 Workers 开其他线程...
leconio 小成 2024-9-18 22:16:44
前面套个 nginx 负载均衡,开 4 个进程和端口。docker compose 很容易配置。
shuimugan 小成 2024-9-18 22:36:55
不用多进程,不用 Worker threads ,就只能吃满一个核,你直接写个 while(true)看 cpu 占用就知道了,很多脚本语言都是这样设计,包括 php 、python (有 GIL 的版本)、ruby 。
yuuk520 小成 2024-9-18 23:26:21
借用楼主的帖子发问:发送网络请求时记录请求时间会因为服务器压力,导致时间记录不准吗?
NotLongNil 小成 2024-9-18 23:40:33
@Zhuzhuchenyan 正解👍
返回顶部