lodash或者强调每个方法在Node.js中并行运行?

我知道在节点中,除了你的代码之外,所有东西都是平行的。 阅读这里和这里 。

我正在寻找一个可能的场景,我在内存中有一个非常大的数组,我想对它的每个元素执行一个小的计算。 这个计算执行的顺序并不重要。

在节点中,由于事件循环,所有的I / O执行都非常有效,但是当你迭代一个集合时,不会有I / O参与,如果迭代时间太长,你可以在那段时间内阻塞所有的传入请求。

这个要点包含了Neilk在他的文章中写到的nonBlockingForEach 为什么你应该使用Node.js来执行CPU绑定的任务 ,这让我想知道是否我写了这样的东西

var my_very_large_array = [...]; my_very_large_array.forEach(function() { ... }) //or _.each(my_very_large_array, function() { ... }) 

我将在我的服务器上遇到性能瓶颈(如果存在的话,这个库可以回退到原生的forEach)

从我学到的东西中,有很多像async.js这样的库,但是我总是在浏览器中使用lodash或者下划线来完成这些任务。

我也试过bluebird.js,但promisifying这些方法没有按预期工作。

所以我的问题是这个。 在使用forEach方法迭代大型集合时,lodash或者在node.js环境中强调性能杀手?

有一个名为“Web Workers”的新标准,允许后台工作在同一个进程的单独线程中进行。 这需要更高版本的node.js,并从这里安装一个单独的包:

从维基页面 :

W3C和WHATWG将networking工作者设想为长时间运行的脚本,这些脚本不会被用户界面脚本(响应点击或其他用户交互的脚本)打断。 保持这些工作人员不被用户活动中断,应该允许网页在后台运行长时间任务的同时保持响应。

工作人员最简单的使用方法是在不中断用户界面的情况下执行计算量大的任务。

您可以通过安装webworker-threads软件包来启用node.js中的Web Worker

所以我的问题是这个。 在使用forEach方法迭代大型集合时,lodash或者在node.js环境中强调性能杀手?

是的, lodashunderscore都会在使用大量数据的时候,在典型的node.js设置中lodash性能,因为它们会阻塞唯一可用的线程,使得在事件循环中排队的其他任务受到影响。 但是,如果您要在networking工作者线程中运行这些线程,那么您的主线程将可以自由地继续处理正常的工作。

“性能杀手”是一个相对的,相当负载的术语。

为了回答你的直接问题,每个人都可以在lodash或下划线上同时运行:不。 它使用标准的同步迭代。

NodeJS是一个单线程的单进程应用程序。 如果在单个forEach中处理整个数组,或者将它分解成由事件队列处理的多个循环,则无关紧要。 这个CPU核心的工作量还是要一样的。

如果你想利用多个核心。 您需要使用cluster模块,并创build多个在arrays的不同部分工作的进程。

在NodeJS中没有共享内存或线程locking。 所以你将不得不把数组分解成每个进程的工作。

https://nodejs.org/api/cluster.html