Articles of 并发性

如何确保在ElasticSearch盆景免费实例中使用Firebase FlashLight为每个对象build立索引

感谢FlashLight https://github.com/firebase/flashlight教程,这对于使用Firebase进行全文search非常简单。 但是,如果保留免费的ES实例,并发访问将受到限制,当您启动节点应用程序时,会在日志中看到以下消息: 无法索引firebase / xxx / -KHLhdwGplb3lHWjm8RS:错误:超出并发请求限制。 请考虑批量处理您的请求,或联系support@bonsai.io寻求帮助。 如何解决这个问题?

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()}); […]

限制Q承诺Node js中的并发

有什么办法可以限制在js中一次执行的并发Q promise的数量吗? 我正在build立一个networking刮板,它必须要求和parsing更多的3000多页,并没有扼杀一些请求我没有响应的时间,所以连接rest和所需的响应(HTML代码)变得不可用。 为了对付这个问题,我发现限制了我的问题消失的请求数量。 我已经尝试了以下方法,但无济于事: Q承诺中的并发限制 – 节点 我怎样才能限制Q promise的并发性? https://gist.github.com/gaearon/7930162 https://github.com/ForbesLindesay/throat 我需要请求一个url数组,每次只做一个请求,当数组中的所有url都完成时,然后将结果返回给一个数组。 function processWebsite() { //computed by this stage urls = [u1,u2,u3,u4,l5,u6,u7,u8,u9]; var promises = throttle(urls,1,myfunction); // myfunction returns a Q promise and takes a considerable // amount of time to resolve (approximately 2-5 minutes) Q.all(promises).then(function(results){ //work with the results of the promises array […]

Node.js的http.request有什么性能? 它可以处理多less个并发请求?

我的node.js服务器使用最新的(0.4.8)http.request调用来调用另一个服务器。 我使用jMeter来运行负载testing。 每秒有50-100个并发线程,循环1000次。 当脚本继续运行时,我观察到一些减速。 我监测的networking吞吐量相当低,CPU和内存也很低。 而在另一台服务器上,日志显示他们的回应很快。 (毫秒)。 但是,我的node.js服务器中的console.log显示http.request响应时间从200-300 ms开始,到2000-3000 ms。 我不确定是否有可以并发http.request的限制。 请指教。 经过巨大的testing,我认为http.request的平均约300-400个请求/秒,ok服务器,maxSockets = 1024。通常,我看到每个请求的速度(连接到不同的网站)大约是80-100毫秒。

Node / Express:使用会话存储状态时的并发问题

所以我search了一下,发现了几个类似的问题,但都没有真正解决这个问题,所以我觉得这个问题本身就是值得的。 我有一个修改会话保持状态的一堆路由的快速应用程序。 事情是,如果有多个并行请求,由于请求之间的竞争条件,会话会不时被覆盖。 所以通常 … app.use(express.static('/public')); app.use(session(…)); app.route('methodA').get(function(req, res, next) { doSomethingSlow().then(function() { req.session.a = 'foo'; res.send(…); } }); app.route('methodB').get(function(req, res, next) { doSomethingElseSlow().then(function() { req.session.b = 'bar'; res.send(…); } }); 基本上这个问题很简单,例如在这个答案中描述。 Express将会话存储在res.end()中,但在处理methodA请求时,methodB请求可能会在此期间修改会话,以便methodA存储会话时将覆盖methodB所做的任何更改。 因此,即使节点是单线程的,并且所有请求都由同一个线程提供服务,只要有任何方法正在执行某种asynchronous操作,我们就可以最终解决并发问题,从而让其他请求同时处理。 但是,我正在努力决定如何着手解决这个问题。 所有我find的答案只列出了最小化发生这种情况的可能性的方法,例如通过确保静态内容不通过在会话MW之前注册服务静态MW来存储会话。 但这只是在一定程度上有所帮助; 如果实际上API方法应该被并行调用,那么需要一些实际并发的会话更新方法(IMO,当涉及到并发问题时,每个“解决scheme”都力求最小化发生问题的可能性而不是寻址实际问题肯定会出错)。 基本上这些是我目前正在探索的select: 完全通过修改我的客户端来防止在同一个会话中的并行请求,以确保它连续调用所有的API方法。 这可能是可能的,但会对我的架构产生相当大的影响,并可能影响性能。 它也避免了这个问题,而不是解决这个问题,如果我的客户端出了问题,或者另一个客户端使用了API,我可能还会随机遇到这个问题,所以它不会很健壮。 确保每个会话写入之前都有一个会话重新加载,并使整个重新加载 – 修改 – 写入操作成为primefaces。 我不知道如何做到这一点。 即使在修改和存储会话之前修改res.end()来重新加载会话,因为读取和写入会话是asynchronousI / O,似乎可能会发生这种情况: 请求A重新加载会话 请求A修改session.A ='foo' 请求B重新加载会话(并不会看到session.A) […]

Golang中的nodejs setTimeout是什么?

我目前正在学习,并且我错过了来自golang的Nodejs的setTimeout 。 我还没读过很多,我想知道是否可以像间隔或回送一样执行相同的操作。 有没有一种方法可以将它从节点写入golang? 我听说golang处理并发性很好,这可能是一些goroutines或其他? //Nodejs function main() { //Do something setTimeout(main, 3000) console.log('Server is listening to 1337') } 先谢谢你! //Go version func main() { for t := range time.Tick(3*time.Second) { fmt.Printf("working %s \n", t) } //basically this will not execute.. fmt.Printf("will be called 1st") }

Node.js – child_process和集群混淆

以这个简短的例子:我有一个名为parent.js的文件,使用下面的代码: var child_process = require('child_process') var forker = child_process.fork(__dirname + '/child.js') forker.on('message', function (msg) { console.log('PARENT got message:', msg) }) // sends a message to the forked process? forker.send({msg: 'Parent message.'}) 第一个问题 :我是否正确? child_process.fork()返回forker进程,不是吗? (像child_process.spawn() ?) 无论如何,这里是child.js的代码: process.on('message', function (msg) { console.log('CHILD got message:', msg) }) // sends a message to the forker process? why? […]

我应该学习哪种新的语言来实现高性能,高并发性,Web开发?

我对服务器上只有PHP非常有信心。 但是,我有一些额外的时间,我想学习一种新的服务器语言。 我知道如何比较慢的PHP比较新的平衡和线程服务器技术。 我一直在调查: NodeJS:用JavaScript编写,编译并通过Google的V8版本运行。 RingoJS:用JavaScript编写,运行在Mozilla的Rhino基于Java的引擎下。 erultin:Erlang,不知道多less,但似乎超快: http : //www.ostinelli.net/a-comparison-between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/ mochiweb:Erlang也是,而且通常被认为是快速的。 龙卷风:基于Python,似乎是最慢的。 我想知道我应该学什么语言。 如果我使用RingoJS / NodeJS,那么我实际上不需要学习任何东西。 但是,我对Erlang或Python一无所知。 我应该考虑学习一个,如果我的目标是能够build立高端networking服务器(软件/网站)? 一般来说,哪一种语言和图书馆在推动高性能网站方面拥有最大的发展前景? 当然,我可以用C ++来完成所有的工作,但是这似乎很费时,而且我认为Python和Erlang更容易。 带线程的ASP.NET似乎很痛苦,所以,我想我会离开它。 那么Twisted(Python)呢? 或者Eventmachine(ruby)?