我有一个nodejs应用程序,它从一个服务器获取数据并推送到另一个服务器。为了测试,我向节点服务器发送了1000个请求,并查看了系统监视器上发生的情况。在那里我可以看到所有4个处理器都被100%占用。
现在,根据我在nodejs上看到的内容,它似乎默认只使用1个线程(这意味着1个处理器?)。但是我的计算机处理器怎么被占用了呢?这种负载平衡是否发生在操作系统级别(我在ubuntu 14上)
如果平衡是由操作系统完成的,那么这种自动操作系统级负载平衡与明确使用集群来划分负载之间有什么区别?各自有哪些优点/缺点?
任何帮助都会非常感激:)
答案 0 :(得分: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)