Articles of 并行处理

控制进程分配给处理器

fork是否总是在一个单独的处理器中创build一个进程? 有没有办法,我可以控制分配到一个特定的处理器。 例如,如果我有2个处理器,并希望fork创build一个并行进程,但在包含parent进程的同一处理器中。 NodeJS是否为此提供了任何方法? 我正在寻找对进程分配的控制权。 这是个好主意吗? 另外,可以分叉的最大进程数是多less,为什么?

良好的实时/并行HTTP爬虫库/平台?

我正在构build一个爬虫程序,可以从多个网站并行获取信息,以响应客户对这些信息的请求。 我需要从10-20个网站请求特定的页面,parsing他们的内容以获取特定的信息片段,并尽快将这些信息返回给客户端。 我想asynchronous执行,所以客户端在第一个结果准备就绪的时候显示第一个结果,而其他的请求仍然在等待处理。 我有一个Ruby背景,因此更愿意在Ruby中构build解决scheme – 但是,并行性和速度正是Ruby不为人知的。 我相信像EventMachine和Typhoeus这样的图书馆可以弥补这一点,但我也强烈地考虑node.js ,因为我知道javascript很好,似乎是为这样的事情而构build的。 无论我select什么,我也需要一种有效的方式将结果传达给客户。 我正在考虑简单的AJAX(但这将需要轮询服务器),networking套接字(但这将需要回退旧版本的浏览器)和持久的客户端/服务器通信的具体解决scheme,如抽筋 , 剑圣和推者 。 有没有人有任何经验和/或build议,他们想分享?

在node.js应用程序中完成并行http获取请求

我想要并行执行一些HTTP请求,映射到结果上,然后在所有结果都准备好的情况下重新同步(join),以便呈现结果页面。 伪代码: var value_needed_to_render_page = async.parallel([array of values to iterate over], function to call in parralel on array).join() return page_render(value_needed_to_render_page); 我一直在寻找asynchronous和FutureJS,但没有find一个好方法。

使用node.js并行操作元素?

我有一个像这样的json对象数组 – var resultsArr = [ { "upvotes": "45", "postID": "4555", "numberOfComments": "45", "shares":"22" }, { "upvotes": "21", "postID": "4665", "numberOfComments": "20", "shares":"24" }, { "upvotes": "4", "postID": "77366", "numberOfComments": "0", "shares":"4" }, { "upvotes": "49", "postID": "6565", "numberOfComments": "22", "shares":"54", }]; 我需要计算基于upvotes , numberOfComments , shares的价值score ,然后将其推回到JSON字典,以便数组中的每个对象看起来像这样 – var resultsArr= [{ …. }, { […]

使用Javascript node.js如何并行处理For循环?

我只是在2天前开始学习JavaScript,所以我很新。 我写了代码是最佳的,但需要20分钟运行。 我想知道是否有一个简单的方法来并行处理与循环例如 for(x = 0; x <5; x ++){processor 1 do … for(x = 5; x <10; x ++){processor 2 do …

Node.js中的subprocess之间的通信

我想在node.js中创build一个使用childproccess的fork()方法创build两个进程的程序。 过程如下: Father.js Son1.js Son2.js 我想直接在两个subprocess之间传输数据,而不是在父子之间传输数据。 我向你展示了我想要做的事情。 儿童进程之间的沟通 我试着用下面的代码,但它不适合我。 在father.js代码中,我正在创buildsubprocess,如下所示: const cp = require("child_process"); var son1 = cp.fork("${__dirname}/son1.js"); var son2 = cp.fork("${__dirname}/son2.js"); console.log("father sending message to son1.."); son1.send({msg:'Hi son1',br:son2}); console.log("father sending message to son2.."); son2.send({msg:'Hi son1',br:son1}); Son1.js的代码: var brother=null; process.on('message', function(json) { console.log('message father in son1.js;', json.msg); brother=json.br; brother.send("hello I'm son1.js"); }); 而Son2.js的代码是: var brother=null; […]

如何使用并行subprocess在大型数组上执行“工作”?

我有一大堆数字。 我想要使​​用JavaScript / Node.js来计算所有数字的总和。 (就这个问题而言,这是一个简单的总和;实际上我有一个更复杂和更冗长的math运算来执行)。 在单线程的世界中,计算总和需要很长时间。 为了更快速地处理结果,我一直在尝试将工作委托给多个并行运行的subprocess。 每个subprocess确定一个子数组的总和,并且在父进程中总计一切。 我的两个脚本如下: index.js function computeSum(data) { var start = new Date(); var sum = data.reduce(function(a, b) { return a + b; }); console.log("Sum = %s, Time = %s ms", sum, new Date().getTime() – start.getTime()); } function computeSumConcurrent(data) { var child_process = require("child_process"); var os = require("os"); var cpuCount […]

我如何dynamic使用for循环,将不同的参数推送到一个数组?

目前我正在尝试使用Node.JS并行运行具有不同参数的相同函数 为此,我使用Async.js,我正在努力尝试推/堆栈函数到一个数组。 问题是这些函数是用相同的参数执行的。 这是我的: var async = require("async"); var array = []; var x = [1,2,3,4]; // This portion of code works perfect and the arguments are passed perfectly // The results that i am getting are: [100, 200, 300, 400] array.push(function(callback){ callback(null,calculate(x[0]))}); array.push(function(callback){ callback(null,calculate(x[1]))}); array.push(function(callback){ callback(null,calculate(x[2]))}); array.push(function(callback){ callback(null,calculate(x[3]))}); // This portion of code does […]

Node.js async.parallel,它是平行的吗?

我知道节点依赖于单个事件线程。 所以没有办法让它有并行的线程。 但是async.parallel确实提供了类似并行的function。 Stack上的另一个问题意味着async.parallel正在使用process.nextTick。 所以基本上async.parallel是只是一个并发function,而不是一个真正的并行function?

使用Node.JSdevise机器人,运行时随机超时和一个共同的例程

我想用Node.JS来devise一些机器人。 这是这些机器人的要求: 有多达10个“机器人”。 我不知道如何在NodeJS中做到这一点,考虑到它的单线程,我假设是否有10个asynchronous的工作项,这将代表10'机器人'? 机器人执行基本的REST任务,如POST到远程服务器。 假设每个POST都是成功的(或者假设我们不在乎是否有失败)。 虽然远程服务器是相同的,function是相同的(POST),但参数可能有变体,每个机器人将提供可变参数,如负载到POST 机器人应该在发射任务之前通过随机睡觉K秒来模拟人类的行为。 然后在执行另一个任务之前,它自己排队等待k秒。 这增加了一个复杂的程度,我不能包裹我的头 – 如果我使用睡眠/超时function,如setTimeout或setInterval将这10名工人并行睡眠或连续睡眠。 如果他们连续睡觉,那么我没有10个机器人,而是我有10个连续的工作人员按顺序排队! 到目前为止我所尝试过的:既然我是NodeJS的新手,我还没有find正确的方法来处理这个问题。 我查看了一个工作队列的beanstalkd ,但是用户服务将序列化地显示出序列 我目前正在评估async.parallel,但似乎并行是一个'障碍',所有并行作业将进行到下一个迭代,只有在所有并行作业完成并行执行的function后,但在我的情况下,我想,例如,即使机器人7在其第一次迭代中处于长时间睡眠状态,也要重新执行机器人3并在其第二次迭代中睡觉