Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解Node.js单线程性能_Javascript_Node.js_Multithreading_Performance - Fatal编程技术网

Javascript 了解Node.js单线程性能

Javascript 了解Node.js单线程性能,javascript,node.js,multithreading,performance,Javascript,Node.js,Multithreading,Performance,我最近创建了一个node.js程序,用于简单地计算某些javascript函数的执行时间。代码很简单,得到一个函数,运行一百次,然后从一百次运行的数据中确定时间统计信息 这一切都是在单个线程上运行的(没有集群、没有工作线程、没有IO组件),因此我看到的行为令人困惑。我看到大量的利用率分散在多个CPU上,而不是一个CPU来处理数据。我很好奇,这是否与我发现node比Chrome慢(x3慢左右)的原因有关 我试图将执行限制在一个CPU上,这样我就可以使用集群功能并行化代码。在我对代码的集群实现(不

我最近创建了一个node.js程序,用于简单地计算某些javascript函数的执行时间。代码很简单,得到一个函数,运行一百次,然后从一百次运行的数据中确定时间统计信息

这一切都是在单个线程上运行的(没有集群、没有工作线程、没有IO组件),因此我看到的行为令人困惑。我看到大量的利用率分散在多个CPU上,而不是一个CPU来处理数据。我很好奇,这是否与我发现node比Chrome慢(x3慢左右)的原因有关

我试图将执行限制在一个CPU上,这样我就可以使用集群功能并行化代码。在我对代码的集群实现(不是上面的单线程实现)中,我发现使用更多的子线程并没有多大好处。例如,1个孩子需要95秒,2个孩子需要89秒。对于像这样可并行的东西,我希望能有更大的性能提升

对于一个对node比较陌生的人来说,有人能解释一下幕后发生了什么吗?是什么导致了大量的上下文切换?还有关于如何提高性能的想法吗

测试代码节点实际上正在执行(尽管我已经用多段代码尝试了这一点,以获得相同的结果):

var总和=0.0;
对于(变量i=0;i<1e10;i++){
总和+=数学功率(i,0.01);
}

控制台日志(总和)您在什么操作系统上运行此操作?大多数操作系统不会将进程专用于单个CPU。当一个进程处于睡眠状态(以便其他进程运行)然后稍后醒来(当轮到该进程获取CPU时间时),它只会得到下一个可用的CPU。有些操作系统可以执行CPU固定,这会迫使操作系统尽可能在同一个CPU上运行进程。这是在Windows上,所以我无法避免一些进程切换。然而,与运行的c程序相比,我观察到c程序在单个CPU上的专用性更高,利用率接近100%,即使它在windows的进程管理中处于休眠状态。在任务管理器的“详细信息”选项卡下,您可以右键单击某个进程并设置其CPU相关性,将其锁定到单个核心。