Tag: 事件循环

运行NodeJS事件循环/等待subprocess完成

我首先对这个问题进行了一般性描述,然后详细介绍了为什么通常的方法不起作用。 如果你想阅读这些抽象的解释继续。 最后,我解释了更大的问题和具体的应用,所以如果你想阅读,跳转到“实际应用”。 我正在使用一个node.jssubprocess来做一些计算密集型的工作。 父进程是工作的,但是在执行的某个时刻,它会到达一个点,在这个点上它必须有来自subprocess的信息才能继续。 因此,我正在寻找一种方法来等待subprocess完成。 我目前的设置看起来有点像这样: importantDataCalculator = fork("./runtime"); importantDataCalculator.on("message", function (msg) { if (msg.type === "result") { importantData = msg.data; } else if (msg.type === "error") { importantData = null; } else { throw new Error("Unknown message from dataGenerator!"); } }); 和其他地方 function getImportantData() { while (importantData === undefined) { // wait for […]

如何检测和测量node.js中的事件循环阻塞?

我想监视node.js中事件循环的每次运行需要多长时间。 但是,我不确定测量这个最好的方法。 我能想出最好的方式是这样的: var interval = 500; var interval = setInterval(function() { var last = Date.now(); setImmediate(function() { var delta = Date.now() – last; if (delta > blockDelta) { report("node.eventloop_blocked", delta); } }); }, interval); 我基本上通过查看setInterval的延迟推断事件循环运行时间。 我在阻塞的节点模块中看到了相同的方法,但感觉不准确和沉重。 有没有更好的方法来获得这些信息? 更新:更改了代码使用setImmediate作为setImmediate完成。

node.js事件循环诊断

是否有可能偷看事件循环进行诊断? 我想知道有多less事件正在等待执行(不包括setTimeout / interval)。 更新:我想从运行节点进程内部执行此操作。

在JavaScript中编写非阻塞for循环的最简洁的方法是什么?

所以,我一直在想一个脑筋急转弯 – 如果我有一个很大的对象,我因为某种原因不得不在js节点中迭代,并且不想阻止事件循环。 这是一个非常好的例子,我相信它可以更清晰: var forin = function(obj,callback){ var keys = Object.keys(obj), index = 0, interval = setInterval(function(){ if(index < keys.length){ callback(keys[index],obj[keys[index]],obj); } else { clearInterval(interval); } index ++; },0); } 虽然我确定还有其他的原因,它会混乱,这将执行比一个普通的循环慢,因为setInterval 0实际上不是每0毫秒执行,但我不知道如何做一个循环与多更快的process.nextTick。 在我的testing中,我发现这个例子需要7毫秒的时间来运行,而不是本地for循环(hasOwnProperty()检查,logging相同的信息),这需要4毫秒。 那么,使用node.js编写相同代码的最简洁/最快的方法是什么?

Node.js事件循环理解(附图)

我读过这个和这个 ,看着这个 … 我已经做了一个我如何理解的图表: Javascriptcallback(函数)可以存在于current queue , check queue , close callbacks queue , timers queue和I/O callbacks queue 。 Js代码一次只能从current queue一个函数(任务/作业)执行。 此时执行的Js代码可以将微任务(作业)添加到current queue ,以便在自身和macros任务(任务)之后执行到check queue 。 它只能通过请求API来将任务添加到其他队列中。 Idle, prepare阶段是用于一些内部节点的业务(也许就像垃圾收集)。 Poll阶段轮询线程池中的线程,并使用适当的callback来填充队列。 Idle, prepare和poll阶段没有与他们相关的jscallback队列。 (四) thread pool的thread pool都是完全相同的,没有专门化。 事件循环从每个队列中逐一执行并执行任务,直到其为空,然后移至下一个队列。 队列中的任务没有任何与其关联的作业(微服务)。 作业仅在执行任务或其他作业期间创build,仅存在于current task queue 。 这种理解是正确的还是我错过了什么? MS Power Point .pptx文件与图表可以在这里find。