由于Node.js是单线程的,因此如果我运行的应用程序不涉及Node.js的任何IO,那么即使它运行在8核CPU机器上,它也将始终仅使用一个CPU核吗?
假设我有一个服务,该服务返回在Node上运行的两个数字的总和,并且有1000个请求同时命中该服务(假设该服务在主线程上计算总和,并且不使用回调,因为它是一个简单的任务)。因此,即使有7个内核处于空闲状态,Node一次也只能处理一个请求?在Java世界中,如果我在应用程序服务器Tomcat中将HTTP线程池大小设置为8,则相同的1000个请求的执行速度将比节点快8倍。
那么,我是否必须在一台8核机器上运行8个Node.js实例,并在其前面安装一个负载均衡器,以便使用所有8核?
由于Node.js是单线程的,因此如果我运行的应用程序不涉及Node.js的任何IO,那么即使它运行在8核CPU机器上,它也将始终仅使用一个CPU核吗?
假设您没有派生任何子进程,Node一次最多使用一个核心,是的,无论有多少个可用核心。但是,拥有多个内核会有所帮助,因为这可以减少Node与其他进程之间的争用。
因此,即使有7个内核处于空闲状态,Node一次也只能处理一个请求?
基本上可以,但是实际上,您不可能让所有其他内核都处于空闲状态。
在Java世界中,如果我在应用程序服务器Tomcat中将HTTP线程池大小设置为8,则相同的1000个请求的执行速度将比节点快8倍。
只有Java Java Web应用程序在与Node相同的时间量内处理请求时,才可以执行此操作。是否这样做取决于很多因素,因此几乎无法预测。它只能被测量。可以想象的是,测量Webapp与Java的Java实现的性能。在测试条件下,同一个Web应用程序的Node实现会发现该特定Java实现比该特定Node实现要慢得多。或不。
那么,我是否必须在一台8核机器上运行8个Node.js实例,并在其前面安装一个负载均衡器,以便使用所有8核?
我敢肯定细节上可能会有变化,但是基本上是可以的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句