Tag: 节点 光纤调度

Node.js使用setTimeout调度的光纤和代码会导致崩溃

我正在使用Fibers来解决有关如何在node.js中控制事件循环的问题,暂停某些同步代码的执行 。 这很好,主要是,但我遇到了一个奇怪的崩溃,但我无法find它的原因。 build立 有三个过程: 一个主要的服务器进程,它接收代码进行testing和执行。 当它接收到新的代码来执行它时,使用child_process.fork()来产生 执行过程。 这将使接收到的代码不时地调用特定的callback来报告执行的代码中发生了什么。 然后执行使用Contextify创build的沙箱中的代码。 有时这些报告包括错误的位置信息关于代码中的行和列的事情发生。 在这种情况下,需要使用源地图将仪表代码中的位置映射到原始代码中的位置。 但是计算这个源图需要花费大量的时间。 因此,在开始执行之前,执行过程会产生 源图计算过程。 这只需要原始代码和检测代码并计算源地图。 完成后,它将完成的源映射发送到执行过程并退出。 如果执行过程在执行完成之前需要callback中的源映射,它将使用Fiber.yield()来控制事件循环,从而暂停执行。 当执行进程接收到数据时,它使用pausedFiber.run()继续执行。 这是这样实现的: // server.js / main process function executeCode(codeToExecute) { var runtime = fork("./runtime"); runtime.on("uncaught exception", function (exception) { console.log("An uncaught exception occured in process with id " + id + ": ", exception); console.log(exception.stack); }); runtime.on("exit", […]