Tag: 并行处理

在瀑布内节点asynchronous并行

我在Nodejs中构build一个服务器来从某个数据库检索数据。 我已经使用了asynchronous库了一段时间了,并想出了一些东西,例如把一个瀑布放在一个并行函数中。 我偶然发现了一个问题,我首先需要执行一个查询,然后在可以同时执行的其他查询中使用该查询的结果。 代码看起来像这样: async.waterfall([ function(callback) { connection.query( query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); }, async.parallel([ function(resultFromWaterfall,callback) { connection.query(query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); }, function(resultFromWaterfall,callback) { connection.query(query, function(err, rows, fields) { if (!err) { […]

Node.JS async.parallel不会等到所有任务完成

我正在使用aync.parallel并行运行两个函数。 这些函数请求RSS提要。 然后RSS提要被parsing并添加到我的网页。 但由于某种原因, async.parallel运行callback方法,而不必等到两个函数完成 该文件说: 一旦任务完成,结果作为一个数组传递给最终的callback。 我的代码。 require('async').parallel([ function(callback) { fetchRss(res, bbcOpts); // Needs time to request and parse callback(); }, function(callback) { // Very fast. callback(); } ], function done(err, results) { if (err) { throw err; } res.end("Done!"); }); 其实我只有“完成!” 在我的网页上。 为什么? 为什么我需要调用res.end() ? Node.JS文档说: response.end()方法必须在每个响应中调用。 如果我不打电话,我的网页将被“下载”(我的意思是在我的浏览器的地址栏中的进度条)。

nodejs并行callbackdevise模式

我试图find一个很好的模式来执行一堆并行任务。 让我来定义一些任务来举例说明。 任务a, b, c, d, e, f, g执行为a(function(er, ra){//task a returned, ra is result}) ,所以b到g 还有一些任务应该在某个任务完成后执行,我们称它们为ab, bc, abc, bd, bcd, af, fg ,表示当a和b返回ab(ra, rb)应该一次执行,当b和c返回时,应立即执行bc(rb, rc) ,如果a , b , c全部返回,则应执行abc(ra, rb, rc) 。 对于最简单的情况,如果只有a和b ,我可以这样做: (function(cb){ var count = 2, _ra, _rb; function update(){if(–count == 0) cb(null, _ra, _rb)} a(function(er, ra){_ra = ra; update()}); […]

是否有可能在Node.js中分叉一个JavaScript函数?

我尝试从我的主JavaScript文件执行长时间运行的函数。 我有2 cpu,所以我怎么才能分叉function?

CasperJS,并行浏览与testing框架

问题:我想知道是否有可能在一个脚本文件中使用testing框架进行并行浏览,所以使用tester模块和casperjstesting命令。 我见过一些人创build了两个casper实例: CasperJS同时请求和https://groups.google.com/forum/#!topic/casperjs/Scx4Cjqp7hE ,但正如文档中所述,我们不能创build新的casper实例在一个testing脚本。 所以我试着做一个类似的简单的例子 – 一个caspertesting脚本(只需复制并执行这个工作): var url1 = "http://casperjs.readthedocs.org/en/latest/testing.html" ,url2 = "http://casperjs.readthedocs.org/en/latest/testing.html" ; var casperActions = { process1: function () { casper.test.begin('\n********* First processus with our test suite : ***********\n', function suite(test) { "use strict"; casper.start() .thenOpen(url1,function(){ this.echo("1","INFO"); }); casper.wait(10000,function(){ casper.test.comment("If parallel, it won't be printed before comment of the second processus !"); […]

使用node.js运行许多并行http请求

我的任务是将一个进程分成许多并行运行的小进程,分发给一些从机。 请求通过HTTP进入服务器,服务器把它分成一些发送给从属机器的subprocess,等待所有的从请求返回响应,然后将聚合结果整理成一个数据对象,作为顶级请求。 我认为node.js会很有用,但是因为它是单线程的,所以我不能确定这是否可行,或者是否会阻止等待每个请求返回,然后再转到下一个请求。 这是可能的node.js? 如果是这样,有人能指出我的方向吗? 即节点模块使用或概述如何完成? 谢谢你的帮助。

什么是事件循环,与使用其他模型有什么不同?

我一直在研究Node.JS,所有的文档和博客都讨论它如何使用事件循环而不是按请求模式。 我有一些混淆理解差异。 我觉得我有80%的理解,但还没有完全得到它。

Async.js – 并行真的平行吗?

正如我迄今为止所理解的:Javascript是单线程的。 如果推迟某个过程的执行,则只需在该线程空闲时安排它(排队)以便运行。 但Async.js定义了两个方法: Async::parallel & Async::parallelLimit和我引用: 并行(任务,[callback]) 并行运行一组函数,而不必等到上一个函数完成。 如果任何函数将错误传递给它的callback函数 parallelLimit(任务,限制,[callback]) 与并行相同,只有在任何时候执行的最大“限制”任务才能并行执行任务。 就我对英语的理解而言,当你说:“并行执行任务”是指同时执行这些任务。 Async.js如何在单个线程中并行执行任务? 我错过了什么

有没有办法在Node.JS中的worker / threads / something中共享内存?

我有一个Node应用程序访问一个静态的,大型(> 100M),复杂的内存数据结构,接受查询,然后通过HTTP向客户端提供一小部分的数据。 大多数查询可以在十分之一秒内回答。 华丽的节点! 但是,对于某些查询,search这个数据结构需要几秒钟的时间。 这很糟糕,因为其他人都必须等待。 为了更有效地服务更多的客户,我想使用某种并行性。 但是,由于这个数据结构如此之大,我想在工作者或者线程之间分享,或者你有什么,所以我不会烧数百兆字节。 这将是完全安全的,因为数据结构不会被写入。 任何其他语言的典型“fork()”都可以。 但是,据我所知,在Node中执行并行的所有标准方法明确地使这是不可能的。 为了安全,他们不希望你分享任何东西。 但有没有办法? 背景: 把这个数据结构放在数据库中,或者使用memcached或者类似的东西是不切实际的。 WebWorker API库和类似的只允许简短的序列化消息传入和传出工作人员。 节点的群集使用名为“叉”的调用,但它不是真正的现有过程的叉,它正在产生一个新的。 所以再一次,没有共享的记忆。 可能真正正确的答案是使用文件系统访问共享内存,也就是tmpfs或mmap。 有一些节点库使得mount()和mmap()完全可以用于这样的事情。 不幸的是,人们必须在同步查询和读取之上实现复杂的数据结构访问。 我的应用程序使用数组的字典等数组。 不用重新实现就好了。

Node.js – Async.js:并行执行是如何工作的?

我想知道async.js中的并行执行是如何工作的 async = require('async') async.parallel([ function(callback){ for (var i = 0; i < 1000000000; i++) /* Do nothing */; console.log("function: 1") }, function(callback){ console.log("function: 2") } ]); 在上面的例子中,我期望获得输出: function:2 function:1 但是,控制台抛出反向,发生了什么? 谢谢。