Tag: multithreading

如果nodejs是multithreading为什么我应该使用集群模块来利用多核cpu?

如果nodejs是multithreading的,请参阅本文和 线程由OS来pipe理,可以在同一个内核或者多核cpu的另一个内核中看到这个问题,然后nodejs会自动利用多核cpu, 那么为什么我应该使用cluster.fork来使节点上的不同进程利用多核,如本例中节点docs所示 我知道多进程的优点是,当一个进程下降还有另一个进程响应请求不像在线程,我需要知道是否多核可以利用每个核心的产卵过程或它是一个操作系统的任务,我不能控制

nodejs – 我发现multithreading或使用多个进程比单个进程慢。 为什么?

我有一个CPU密集型任务(循环通过一些数据和评估结果)。 我想利用这些多核心,但我的performance一直比使用单个核心更糟糕。 我试过了: 在不同的端口上创build多个进程,并将任务发送到这些进程 使用webworker-threads来使用线程池在不同线程中运行任务 通过计算我可以完成的迭代总数并除以我在这个问题上花费的时间来衡量结果。 当使用单核时,我的结果明显更好。 一些兴趣点: 我可以确定何时使用一个内核,何时通过任务pipe理器使用多个内核。 我正在使用预期的内核数量。 我有很多的内存 我已经试过在2或3个内核上运行 我添加了nextTicks,在这种情况下似乎没有任何影响 每个任务都需要几秒钟的时间,所以我不觉得自己失去了很多开销 有什么想法在这里发生了什么? 线程更新:我怀疑webworker线程中的错误跳过表示现在,我认为这个问题可能与我的线程循环。 我正在做的是创build一个线程,然后试图连续运行它们,但在它们之间来回发送数据。 即使这两个线程正在使用CPU,只有线程0返回值。 我的假设是散发出来的,通常最终会把信息传递给闲置时间最长的线程,但似乎并非如此。 我的设置看起来像这样 在threadtask.js中 thread.on('init', function() { thread.emit('ready'); thread.on('start', function(data) { console.log("THREAD " + thread.id + ": execute task"); //… console.log("THREAD " + thread.id + ": emit result"); thread.emit('result', otherData)); }); }); main.js var tp = Threads.createPool(NUM_THREADS); tp.load(threadtaskjsFilePath); […]

Node.js集群vs多个Docker容器

据我所知,Docker容器使用多个线程,Node.js应用程序只使用一个线程。 通过运行类似于处理Node.js集群的pm2 ,我可以利用Docker容器可用的所有内核。 这是否意味着我可以通过对Node.js进程进行集群来更好地利用每个Docker实例? 如果是这样,这是不是比每个容器简单运行一个单线程的Node.js实例更受欢迎? 一个担心的是,如果这有可能造成Docker容器扩大或缩小其运行的CPU数量的副作用。

Node.js将带有函数定义的对象发送给工作线程

所以我在Node.js的一个项目中工作,我想打开一些额外的线程来更有效地处理处理负载。 但是我正在使用带有函数定义的类,当我尝试将这些对象发送给工作线程时,对象中定义的函数就消失了,我只剩下对象中的其他字段。 有没有办法给工人发送一个对象,并保留这些function,以便在工人内部调用它们? var cluster = require('cluster'); if(cluster.isMaster){ Monster = function(species){ this.attack = function(){ console.log('CHOMP'); }; this.name = species; }; var vamp = new Monster('vampire'), worker = cluster.fork(); worker.send({'monster' : vamp}); } else{ process.on('message', function(msg) { console.log(msg.monster); //this logs "{ name: 'vampire' }" msg.monster.attack(); //TypeError: Object #<Object> has no method 'attack' }); }

使Meteor.methods同步和asynchronous

有时我需要Meteor.call来writeMeLater排队并同步执行(阻止来自同一个客户端的writeMeLater其他调用)。 其他时候writeMeLater的调用应尽快执行,而不排队等待当前排队的所有调用。 下面是我尝试使用this.unblock()如果一个async参数为true。 案例1和2工作正常。 但在案例3中,使用async=true调用在async=true调用后面排队! 我们如何使用async=true来调用跳过队列? 这与来自第二客户端的呼叫在来自第一客户端的呼叫之后没有排队是类似的, 所有的Meteor.call()都是由客户端创build的 情况1(正确同步): Meteor.call('writeMeLater', 's', false) Meteor.call('writeMeLater', 's', false) Meteor.call('writeMeLater', 's', false) 情况2(正确asynchronous): Meteor.call('writeMeLater', 'a', true) Meteor.call('writeMeLater', 'a', true) Meteor.call('writeMeLater', 'a', true) 情况3(不是所需的行为) Meteor.call('writeMeLater', 's', false) Meteor.call('writeMeLater', 's', false) Meteor.call('writeMeLater', 's', false) Meteor.call('writeMeLater', 'a', true) Meteor.call('writeMeLater', 'a', true) Meteor.call('writeMeLater', 'a', true) 服务器/ main.js writeMeLater = function(data, callback) { console.log('writeMeLater: […]

我如何获得当前的工作人员身份在回环?

当我跑步 NODE_ENV=production slc run 环回会自动启动每个CPU核心的工作人员。 我只想运行一次代码,但每个工作人员都运行它。 我如何检查当前正在运行的工作人员? 我注意到它正在幕后使用强大的主pipe来发挥它的魔力。

如果一个线程在一个进程中崩溃会发生什么?

我有两个noob问题: 1)为什么node.js正在单线程中运行? 为什么不只是使用stream程本身呢? 或者在线程而不是进程中运行它有什么好处? 2)如果一个进程中的线程崩溃(我知道,未处理的exception将导致进程退出)会发生什么情况,但是如果正确catch'd会发生什么? 或者浮点exception等exception。 这个过程是否也会崩溃?

node.js事件循环如何记住长时间运行操作完成后需要callback?

我对NODE.JS很新颖。 我读了node.js中只有单个事件循环(作为它的单线程)存在。 现在假设,情况就是这样,最终用户提出要求并且下面的一段代码是模块用户试图运行的一部分: ….some code before…… longRunningOperation(argumentsForLongOperation, callbackMethod(argumentsForCallBack)); ….some code after…… 由于nodejs是asynchronous的,因此事件循环将调用longRunningOperation并移至下一行代码以在模块中执行 。 现在,当longRunningOperation返回时,我的事件循环如何知道现在应该在longRunningOperation返回时运行callback。 在java中,我们有方法栈,并且线程被longRunningOperation在调用longRunningOperation的地方,所以当函数返回时,线程从完成调用栈开始恢复。 我的问题是如何在node.js事件循环来知道longRunningOperation已经返回,它需要现在调用callBack()函数?

在node.js上的多个线程中运行任务

我需要一些node.js帮助,因为我是一个新手。 我有一个数据arrays,必须在多个线程(使用所有的CPU核心)运行与该数据的function。 通常对于我的语言,我创build了线程数量的线程池,向它推送一些任务,等待直到完成,发送更多的任务队列。 但我不知道如何在nodejs中做到这一点。 PS:我正在使用最新的0.8分支。

NodeJS批处理多处理 – 池中的subprocess(或multithreading)

NodeJS批量多 穿线 处理 – 池中的subprocess。 我知道一个孩子的过程是一个过程,而不是一个线程。 我使用了错误的语义,因为当你提到“multithreading”时,大多数人都知道你的意图是什么。 所以我会把它保留在标题中。 设想一个场景,您不断地使用一个自定义函数或模块来执行多个相似和复杂的事情。 使用所有可用的核心/线程(例如8/16)是child_process.fork() ,这是child_process.fork()的用途。 理想情况下,您将需要一个同步的工作人员和一个控制器发送/callback消息。 node-cpool , fork-pool , child-pool是一些完全可以做到这一点的模块,但是它们似乎是旧的/无法维护的。 有很多类似的模块,但是这些模块似乎是最相关的。 他们都有共同的几个承诺,几乎没有出演,几乎没有分叉,并放弃。 通常情况下,当我找不到任何东西似乎是有意义的任何东西,是有一个更好的方式,我失踪了。 因此我的问题。 我如何有一个pipe理,排队, multithreading 并行fork()的池为我的自定义模块,做一些CPU密集型工作? 像TAGG和webworker-threads这样的multithreading模块是不一样的,因为它们不支持完整的模块(使用二进制编译的组件)。 PS 我现在正在使用fork-pool ,它似乎正是我想要的,有一些怪癖,但是我不能相信这样一个未知的和不受欢迎的模块将是唯一可行的select。