Articles of 多处理

当我开始新的进程时,NodeJS fork进程正在减慢所有其他分叉的进程

我有一个NodeJS程序,它使用ImageMagick从我的数据库中的一些文本创build一个图像。 该程序是从我的NodeJs服务器使用 import childProcess from 'child_process'; let args = [':imageId', '–max_old_space_size=4096']; childProcess.fork('createImage.js', args); 创build图像的过程非常缓慢,在本地机器上可能需要5-6分钟才能处理尺寸为114x84cm的单张图像。 我将尝试解释程序生命周期中发生的事情。 所以,我有服务器上运行的进程MyServer ,当有人请求一个图像MyServer派生一个新的进程。 新的进程ImageCreator1有一个来自promise的循环,并将等到所有的解决。 每个承诺使用ImageMagick创build一个大的图像的一部分 在我的活动监视器中,我可以看到有一些正在运行的进程 Process Name | %CPU MyServer – 0.3 ImageCreator1 – 30.0 convert – 0.1 convert – 0.1 convert – 0.2 convert – 0.1 另外我可以看到ImageCreator1运行asynchronous4-5 ImageMagick转换进程来创build所有这些需要的小图片。 这一切将需要5分钟。 创造大的形象。 所以当我启动两个ImageCreators的时间增加到9 ImageCreators 。 Process Name | %CPU MyServer – […]

NodeJS:本机插件与外部二进制文件的性能

我正在编写一个NodeJS服务器,除了存储其他数据之外,还需要对用户密码进行哈希处理,然后将其存储在数据库中。 由于创build安全哈希的math密集过程,以及需要完成的大量哈希处理,我select在C中对哈希处理进行编码。 我的问题是这样的:通过执行child_process.exec编码的哈希处理,而不是创buildNodeJS的本地插件,我添加了多less开销? IE每次需要对一段数据进行散列处理时,我将需要以该段数据作为参数调用child_process.exec。

将process.stdout设置为每个node.js核心集群工作者的文件

我正在尝试使用节点核心的集群function。 我想stdout和stderrstream输出到一个文件,每个工人ID一个。 非常像以下内容: var fs = require('fs'), env = process.env, workerId = env.NODE_WORKER_ID || env.NODE_UNIQUE_ID; process.stdout = fs.createWriteStream(__dirname + '/app#' + workerId + '.log', { encoding: 'utf8' }); 不幸的是,似乎没有像这样重写process.stdout。 有没有办法做到这一点,还是应该这样做是不同的? 目前,当我运行我的集群时,我在一个控制台中获取所有进程的所有输出,这非常混乱。

Lua是一种基于事件的编程语言吗?

是基于Lua事件还是线程? 最近我对Node.js有很多的了解,看来最大的卖点之一就是基于事件的,而不是基于线程的。 什么是Lua?

运行多个Node.js脚本是否自动在核心之间分配

我想要在多核机器上进行扩展。 使用cluster库是一种select,但是我想知道是否可以通过更简单的方法来实现:通过简单地运行多个服务器。 所以我想知道的是:Node.js是否自动将服务器分布在多个核心上。 所以如果我有5个核心和5个服务器,每个服务器上运行每个核心。 如果是这样,这是一个在多核机器上扩展的可行方法吗?

如何使用Node.js创buildmultithreading应用程序,访问LevelDB?

在LevelUP文档中有这个( https://github.com/rvagg/node-levelup#multi-process-access ): LevelDB是线程安全的,但不适合用多进程访问。 您应该只能从单个Node.js进程打开一个LevelDB数据库。 Node.js集群由多个进程组成,因此LevelUP实例不能在它们之间共享。 所以我不能使用Node Cluster( http://nodejs.org/api/cluster.html ) 是否有另一个选项可以使多进程(或multithreading)Node.js应用程序访问LevelDB数据库?

杀死node.js工作完成后的function

我是一个刚刚开始修补的node.js新手。 我有一段代码执行一个处理所有cpu核心上的string的函数,我想确定哪个工作者先用id完成了函数,然后杀掉每个工作者(或者只是退出节点)。 以下是我的程序的简化代码: var cluster = require('cluster'), cpus = require("os").cpus().length, // 4 cores myArray = ["foo","bar","baz","qux"]; // 1 string per core if (cluster.isMaster) { for (var i = 0; i < cpus; i++) { var worker = cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else if […]

是否使用recursionprocess.nexttick让其他进程或线程工作?

技术上,当我们执行下面的代码(recursionprocess.nexttick),CPU使用率将达到100%或接近。 问题是想象我正在一台CPU上运行,另一个节点HTTP服务器正在工作,它是如何影响它的? 线程做recursionprocess.nexttick让HTTP服务器工作吗? 如果我们有两个线程的recursionprocess.nexttick,他们都得到50%的份额? 因为我不知道有一个核心的任何机器不能尝试它。 而且由于我在这种情况下对线程之间的CPU时间共享的理解是有限的,所以我不应该用具有4个CPU核心的机器来尝试它。 function interval(){ process.nextTick(function(){ someSmallSyncCode(); interval(); }) } 谢谢

“使用Node.js进行直接响应” – 使用不同的Node.js进程发送HTTP响应(与主进程不同)

使用Node.js服务器,我想知道是否可能,并build议发送来自委托工作进程,而不是主进程的HTTP响应。 这些工作进程可以是Node.js服务器本身,也可以是通过IPC进行通信的Node.jssubprocess。 我不认为集群核心模块https://nodejs.org/api/cluster.html可以做我想做的事情,因为在该模型中,所有的工作人员都在同一个端口上侦听,并且他们处理所有的请求代表主人的过程。 我正在寻找的是一个主要的Node.js进程,它响应所有的HTTP请求,可能会进行身份validation并处理一些请求,但也能够将数据密集型或CPU密集型请求委托给工作池。 想象一下,我们对大量的数据有一个GET请求,比如2-3MBs。 我们至less有三种可能的情况: 主进程接收到请求,向数据库请求大量的数据,然后将数据发送回请求者。 主进程接收到请求后,使用IPC将一些数据发送给工作进程,工作人员从数据库获取数据做了一些繁重的操作,然后工作人员使用IPC将所有3MB的数据全部发送回主进程,然后发送回应。 主进程接收请求,向工作人员发送尽可能less的关于请求stream的信息,工作人员完成所有工作,工作人员发回HTTP响应。 我特别好奇#3可能。 情景3的简单描述如下: (要明确一点,我不想要一个请求的三个响应,我只是想表明一个工作人员可能代表主进程发送响应)。 任何人都知道这可能与Node.js工作? 它如何在其他语言中起作用? 通常,我对Node.js并发模型没有任何问题,但对于某些types的数据,使用Cluster模块可能不是实现最高并发性的最佳方式。 我相信这个模型的一个术语是“直接回应”,意思是工作人员直接回应请求。 也许可以简单地使用集群核心模块https://nodejs.org/api/cluster.html 。

在NodeJS中处理长时间运行的进程?

我已经看到一些较旧的post涉及这个主题,但我想知道当前,现代的方法是什么。 这个用例是:(1)假设你想在一个video文件上做一个长时间运行的任务,比如60秒 ,说jspm install可能需要60秒。 (2)你不能细分任务。 其他要求包括: 需要知道任务何时完成 很高兴能够停止正在运行的任务 稳定性:如果一个任务死亡,它不会closures服务器 需要能够处理100个同时请求 我见过这些解决scheme: nodejssubprocess webworkers 光纤 – 不用于CPU绑定的任务 生成器 – 不用于CPU绑定的任务 https://adambom.github.io/parallel.js/ https://github.com/xk/node-threads-a-gogo 任何其他? 现代的,基于标准的方法是什么? 而且,如果nodejs不适合这种types的任务,那么这也是一个有效的答案。