【发布时间】:2017-03-07 15:49:30
【问题描述】:
由于 Node.js 是单线程的,如果我运行一个在 Node.js 上不涉及任何 IO 的应用程序,即使它运行在 8 核 CPU 机器上,它是否总是只使用一个 CPU 内核?
假设我有一个服务,它返回在 Node 上运行的两个数字的总和,并且有 1000 个请求同时访问该服务(假设该服务在主线程上计算总和并且不使用回调,因为这是一个简单的任务)。所以即使有 7 个内核空闲,Node 一次只能处理一个请求?在 Java 世界中,如果我在应用服务器 Tomcat 中将 HTTP 线程池大小设置为 8,那么同样的 1000 个请求的执行速度将比 node.js 快 8 倍。
那么我是否必须在 8 核机器上运行 8 个 Node.js 实例并在其前面使用负载均衡器,以便使用所有 8 核?
【问题讨论】:
-
“如果我在应用服务器 Tomcat 中将 HTTP 线程池大小设置为 8,那么执行相同的 1000 个请求将比节点快 8 倍” - 你测量过吗还是这只是猜测?
-
@Gimby,只是猜测,假设两个数字的总和在 Java 中与 Node.js 花费的时间相同。我忽略了额外线程的成本,因为它们是从池中使用的,并且在 Java 中对于这种不与其他线程共享任何内容的方法不需要任何同步。
标签: java node.js multithreading tomcat