Articles of 并行处理

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并在其第二次迭代中睡觉

并行进程使用asynchronousfs.appendFile(文件,文本,callback)追加txt文件是不错的主意,

我正在开发将开始使用的node.js应用程序 for(i=0; i<os.cpus().length; i++) { cluster.fork(); } 每个节点工作人员将使用node.js函数asynchronous写入一个公共文件 fs.appendFile(file, text, callback) 在这种情况下,并行写入每个节点worker的一个文件。 我不确定这个parralel追加是否会减慢数据保存到文件的速度。 是否可以保存的数据被破坏,因为有平行的写作? 我想知道是不是每个节点工作人员都要写一个自己的文件(比如,如果有8个工人,数据要保存在8个单独的文件中) 该应用程序将被部署在基于UNIX的系统上。 提前致谢

NodeJS sqlite3并发访问

基本上我有一个数据库没有多less出现,但可悲的是两个分组。 首先,对数据库有一个写访问权限。其次,有一个读访问权限。 读访问失败,并显示数据库被locking的消息( { [Error: SQLITE_BUSY: database is locked] errno: 5, code: 'SQLITE_BUSY' } ),这是完全正常的。 但是,我怎样才能让我的读取访问等待数据库closures? 我目前的代码: var sql = "INSERT INTO chickenmilk (userID,channelID,message) VALUES (?,?,?)" db.run(sql, userID, channelID, bot.fixMessage(message), function(err) { console.log(err); db.close(); }); 并发: var sql = "SELECT userID, COUNT(message) as count FROM chickenmilk WHERE channelID LIKE ? GROUP BY userID"; db.all(sql, data, […]

高内存/性能关键计算 – 架构方法观点

我需要一个架构观点和方法来解决以下问题: 介绍: 我们有一个~4M行的表称为Purchases 。 我们也有一个~5k行的表,称为Categories 。 另外,我们有一个~4k SubCategories的表。 我们正在使用T-SQL来存储数据。 在用户请求(在运行期间),服务器接收到大约10-15个可能参数的请求。 根据参数,我们采购,按类别和子类别进行分类,并进行一些计算。 “计算”的一些过程包括过滤,分类,重新安排采购领域,相互减less采购,增加一些其他采购,find储蓄等等。 这个过程是用户特定的,因此每个用户将根据他们的angular色获得不同的数据。 问题: 这个过程大约需要3-5分钟,我们希望把它裁掉。 以前,这个过程是通过webworkers(JS)在浏览器中完成的。 随着内存开始变大,大多数浏览器开始加载失败,我们已经离开了它。 然后,我们将服务移动到服务器(NodeJS),通过subprocess即时处理请求。 subprocess的原因:计算进程经过for循环大约5000倍(对于每个类别)并执行上述“计算”。 通过subprocess,我们能够将工作分配到#ofsubprocess中,如果我们运行了至less16个内核(16个subprocess),则可以获得更好的结果。 目前的处理时间下降到大约1.5-2分钟,但我们想看看我们是否有更好的select。 我明白它很难完全理解我们的目标,而没有看到任何代码,而是专门提出问题。 在运行时对半大数据进行计算的方法有哪些? 我们有一些想法: 使用SQL内存表,并在SQL中进行计算 使用azure色批处理服务 使用更大的机器(〜32-64内核,如果我们不能得到任何其他的想法,这可能是我们最好的select,但是当然,成本增加了很多,但是我们接受成本会增加的事实) 步入hadoop生态系统(或其他大数据生态系统) 其他一些有用的事实: 我们的购买量约为1GB (对于内存计算来说有点过大) 我们正在考虑在redis上进行预计算和caching,以便为客户端准备好一些数据(我们将使用他们的帐户中的参数设置每天预先计算,但客户端往往会频繁更改这些参数,因此我们有有一些有效的方式来处理未caching和预先计算的数据) 如果我们可以提供更多的信息来更好地理解我们的困境,请发表评论,我将尽可能提供更多的信息。 如果可能的话,将会有太多的代码粘贴到这里来完全理解algorithm,因此我想尝试用单词来提供我们的问题。

async.parallel是否也会阻塞代码?

我试图理解async包在代码并行化方面的行为。 据我所知,为了避免callback地狱/汤,结构代码是有帮助的,但这是唯一的优势吗? async.parallel([ function(next) { apiCallTo3rdParty(next); }, function(next) { apiCallTo3rdParty(next); }, function(next) { apiCallTo3rdParty(next); } ], function(err, res) { // do something else with returned data }); 在上面的代码中,所有三个API调用都将在不等待另一个完成的情况下进行。 根据规格。 最后的callback将在最长的API调用返回之后调用,因为其余的将在之前完成。 但是,如果我改变了代码,使它成为一对阻塞操作,会发生什么? async.parallel([ function(next) { sleep(5); }, function(next) { sleep(5); }, function(next) { sleep(5); } ], function(err, res) { // do something else with returned data […]

有没有等效的asynchronous库,但对于node.js的child_processes

在节点中stream行的asynchronous库在处理asynchronous函数的复杂控制结构方面做了很多工作。 例如,假设我有一个银行帐户ID的集合,我想从一个API中检索余额,然后对余额进行求和。 我可以通过做这样的事情来实现asynchronous: var accountIds = [0001,0002,0003,0004,0005,0006] async.mapLimit(accountIds, 3, function fetchBalance(accountID, cbk) { var balanceURL = "http://someapi.com/account/balance/" + accountID; get(balanceURL, cbk); }, function end(err, balances) { if (err) { console.err(err); } console.log(sum(balances)); } ); 这使我不必编写pipe道,以跟踪同时分派多less个asynchronous函数,确保所有函数最终完成,跟踪错误等。另外,它在节点中工作良好,因为I / O(以networking请求)是这个程序的限制因素。 但是,让我们设想一下,不是有单独的任务是I / O绑定的,我们有单独的CPU绑定任务。 asynchronous不会给我任何真正的性能好处,因为node.js只会运行一个主线程。 在节点中并行处理这种工作负载的一种解决scheme可能是使用child_process库并生成一堆工作进程来处理CPU绑定的工作。 我的问题是,是否有一个库可以处理这些工作stream的pipe道/协调,如asynchronous为I / O绑定,asynchronousfunction? 如果没有,这是否值得写? 我认为这可能是一个有趣的练习。

并行数据库请求从Node.js SDK到Couchbase

我希望能够在短时间内向Couchbase商店发出几个Get请求,比如在半毫秒内。 我不能使用multiGet,因为我没有同时拥有所有的密钥。 但是,如果我很快发出了几个单独的获取请求,我相信他们将一次处理一个,如http://docs.couchbase.com/couchbase-devguide-2.5/index.html#retrieving-多键 。 我可能做的一件事情是在启动时为每个Get请求创build一个单独的Connection对象,但是我没有看到在任何地方推荐这个最佳实践。 这样的工作,即允许我快速并行获取并且是推荐的事情吗?

Node.js支持并行吗?

我一直在研究并发和并行的区别。 Rob Pike在谈到关于并发性和并行性之间的差异时,在YouTube上发表了一个演讲。 他的演讲是在Google Go语言的背景下进行的。 据我所知,并发是能够处理多种事情的devise,而并行则是多个事物同时物理执行。 从我也明白,Node.js作为一个单线程进程运行。 因此,尽pipeNode支持并发执行callback的方式,它是否有能力处理任务的并行执行? 它可以设置为在单独的处理器上运行多个线程?

asynchronous并行请求正在顺序运行

我正在运行一个服务器使用Node.js,并需要从我运行的另一台服务器( localhost:3001 )请求数据。 我需要向数据服务器发送多个请求(〜200)并收集数据(响应大小从〜20Kb到〜20Mb不等)。 每个请求都是独立的,我想将响应保存为一个巨大的数组: [{"urlAAA": responseAAA}, {"urlCCC": responseCCC}, {"urlBBB": responseBBB}, etc ] 请注意,这些项目的顺序并不重要,理想情况下应该按照数据可用的顺序填充数组。 var express = require('express'); var router = express.Router(); var async = require("async"); var papa = require("papaparse"); var sync_request = require('sync-request'); var request = require("request"); var pinnacle_data = {}; var lookup_list = []; for (var i = 0; i < 20; i++) […]