0

我有一个 nodejs 应用程序,它从一台服务器获取数据并推送到另一台服务器。为了测试,我向我的节点服务器发送了 1000 个请求,并查看了系统监视器上发生的情况。在那里我可以看到所有 4 个处理器都 100% 被占用。

现在,从我在 nodejs 上阅读的内容来看,默认情况下它似乎只使用 1 个线程(这意味着 1 个处理器?)。但是为什么我所有的计算机处理器都被占用了?这种负载平衡是否发生在操作系统级别(我在 ubuntu 14 上)

如果平衡是由操作系统完成的,那么这种自动操作系统级负载平衡和显式使用集群来划分负载之间有什么区别?每个的优点/缺点是什么?

任何帮助将不胜感激:)

4

1 回答 1

0

虽然应用程序是由单个线程驱动的,但节点内部有辅助线程以促进在运行时环境中的执行。示例是 JIT 编译器线程和 GC 辅助线程。尽管它们不会与应用程序负载成比例地消耗 CPU,但它们将受虚拟机内部特性的驱动。

连接到实时调试器可以显示它们在做什么的线程数:

gdb) info threads
  6 Thread 0x7ffff61d8700 (LWP 23181)  0x00000034d080d930 in sem_wait () from /lib64/libpthread.so.0
  5 Thread 0x7ffff6bd9700 (LWP 23180)  0x00000034d080d930 in sem_wait () from /lib64/libpthread.so.0
  4 Thread 0x7ffff75da700 (LWP 23179)  0x00000034d080d930 in sem_wait () from /lib64/libpthread.so.0
  3 Thread 0x7ffff7fdb700 (LWP 23178)  0x00000034d080d930 in sem_wait () from /lib64/libpthread.so.0
  2 Thread 0x7ffff7ffc700 (LWP 23177)  0x00000034d080d930 in sem_wait () from /lib64/libpthread.so.0
* 1 Thread 0x7ffff7fdd720 (LWP 23168)  0x00000034d04e5239 in syscall () from /lib64/libc.so.6
(gdb) 
于 2016-07-20T09:28:43.837 回答