Javascript 了解Node.js单线程性能
我最近创建了一个node.js程序,用于简单地计算某些javascript函数的执行时间。代码很简单,得到一个函数,运行一百次,然后从一百次运行的数据中确定时间统计信息 这一切都是在单个线程上运行的(没有集群、没有工作线程、没有IO组件),因此我看到的行为令人困惑。我看到大量的利用率分散在多个CPU上,而不是一个CPU来处理数据。我很好奇,这是否与我发现node比Chrome慢(x3慢左右)的原因有关 我试图将执行限制在一个CPU上,这样我就可以使用集群功能并行化代码。在我对代码的集群实现(不是上面的单线程实现)中,我发现使用更多的子线程并没有多大好处。例如,1个孩子需要95秒,2个孩子需要89秒。对于像这样可并行的东西,我希望能有更大的性能提升 对于一个对node比较陌生的人来说,有人能解释一下幕后发生了什么吗?是什么导致了大量的上下文切换?还有关于如何提高性能的想法吗 测试代码节点实际上正在执行(尽管我已经用多段代码尝试了这一点,以获得相同的结果):Javascript 了解Node.js单线程性能,javascript,node.js,multithreading,performance,Javascript,Node.js,Multithreading,Performance,我最近创建了一个node.js程序,用于简单地计算某些javascript函数的执行时间。代码很简单,得到一个函数,运行一百次,然后从一百次运行的数据中确定时间统计信息 这一切都是在单个线程上运行的(没有集群、没有工作线程、没有IO组件),因此我看到的行为令人困惑。我看到大量的利用率分散在多个CPU上,而不是一个CPU来处理数据。我很好奇,这是否与我发现node比Chrome慢(x3慢左右)的原因有关 我试图将执行限制在一个CPU上,这样我就可以使用集群功能并行化代码。在我对代码的集群实现(不
var总和=0.0;
对于(变量i=0;i<1e10;i++){
总和+=数学功率(i,0.01);
}
控制台日志(总和)代码>您在什么操作系统上运行此操作?大多数操作系统不会将进程专用于单个CPU。当一个进程处于睡眠状态(以便其他进程运行)然后稍后醒来(当轮到该进程获取CPU时间时),它只会得到下一个可用的CPU。有些操作系统可以执行CPU固定,这会迫使操作系统尽可能在同一个CPU上运行进程。这是在Windows上,所以我无法避免一些进程切换。然而,与运行的c程序相比,我观察到c程序在单个CPU上的专用性更高,利用率接近100%,即使它在windows的进程管理中处于休眠状态。在任务管理器的“详细信息”选项卡下,您可以右键单击某个进程并设置其CPU相关性,将其锁定到单个核心。