Articles of 事件循环

如何找出事件循环中是否还有事件注册(奖金:多less)

我正在尝试编写一个Node.js程序来执行和监视JavaScript程序。 我正在寻找一种方法来找出被监控程序是否仍在“运行”,即做有用的事情。 在我目前的方法中,当接收到testing代码时,我开始一个新的subprocess并将代码交给它。 subprocess使代码使用Contextify创build一个沙箱,并使用这个沙箱执行代码。 在sandbox.run(code)调用返回之后,我知道sandbox.run(code)的阻塞部分已经完成,并且可以在UI中显示。 但是,现在我不知道代码是否使用setTimeouts注册了任何定时器,或者创build了任何其他事件源,这些事件源将导致部分代码稍后退出。 所以我不知道它是否真的“完成”了。 在Node.js中有没有办法检查事件循环中是否还有事件要处理(甚至更好,剩下多less)? 我发现了另外一个问题 ,但是只讨论了如何监视事件循环,以确定节点的性能是否仍然正常。 但是我对性能不感兴趣(我不在乎执行的代码是否阻塞了10秒,或者每2分钟只执行一次1ms),我不想使用外部工具,而是了解状态从节点本身的事件循环。 那可能吗?

为什么这个JavaScript在Node.js中阻塞?

我有以下简单的http服务器使用Node.js: var http = require('http'); var server = http.createServer(function(req, res) { var counter = 0; for(var i = 1; i <= 30; i++) { http.get({ host: "www.google.com" }, function(r) { counter++; res.write("Response " + counter + ": " + r.statusCode + "\n"); if(counter == 30) res.end(); }); } }); server.listen(8000); 当我卷入8000端口的本地主机时,我确实得到了预期的结果: Response 1: 200 Response […]

在事件循环中为nodejs任务分配优先级

有什么办法可以在事件循环中应用Node.js任务的优先级。 我想为nodejs的事件循环中存在的任务分配优先级。 假设在一个事件循环中有5个作业A,B,C,D,E具有相同的优先级,然后接收下一个作业,其优先级高于后五个作业。 然后事件循环开始执行该更高优先级的作业。

什么函数在NodeJs和JS中放入EventLoop

我一直在阅读一些NodeJs的文章,以了解它的asynchronous性质,在这期间我发现了这个,并且非常喜欢Node.js,Doctor's Offices和Fast Food Restaurants – 了解事件驱动的编程 有一个叫做EventLoop的东西是基于FIFO的队列。 他们说,当一个asynchronous函数被击中时,它会被放到EventLoop并继续在那里执行。 我在这里有点困惑。 例如这里说: 实际上,像setTimeout和setInterval这样的asynchronous函数被推送到一个称为Event Loop的队列中。 并在同一篇文章中: 事件循环是一个callback函数的队列。 当asynchronous函数执行时,callback函数被推入队列中。 JavaScript引擎不会开始处理事件循环,直到执行asynchronous函数之后的代码。 但它不同于这个图像: 我们来看下面的例子: console.log("Hello,"); setTimeout(function(){console.log("World");},0); 所以从我从这些不同的解释中得知, 第一个说function(){console.log("World");} setTimeout()函数的一部分,也就是callback,将放在EventLoop中。 一旦setTimeout完成,它也将执行EventLoop 。 另一个说,整个事情setTimeout(function(){console.log("World");},0); 将被放入EventLoop并将被执行… 我现在更困惑了。 这应该是简单的,但我想一个好的,但简单的解释对我来说是很好的下列问题: 上述哪一项是真实的? 什么是EventLoop? 比喻,方法,对象等真实的东西? 如果我想从零开始实现一个类似于EventLoop的事情,它会如何简单? 也许有些代码会很好看。

Nodejs的内部线程池是如何工作的?

我已经阅读了很多关于NodeJs如何工作的文章。 但是我仍然无法弄清楚Nodej的内部线程是如何进行IO操作的。 他在回答https://stackoverflow.com/a/20346545/1813428时说,NodeJ的线程池中有4个内部线程来处理I / O操作。 那么如果我有1000个请求同时发生,每个请求都要做I / O操作,比如从数据库中检索一个巨大的数据。 NodeJs将这些请求分别传递给这4个工作线程而不阻塞主线程。 所以NodeJs可以同时处理的最大I / O操作数是4次操作。 我错了吗?。 如果我是对的,剩余的请求将在何处处理? 主要的单线程是非阻塞的,不断驱动对相应的运算符的请求,那么这些请求将在哪里去,而所有的工作线程是充满任务? 。 在下面的图片中,所有的内部工作者线程都充满了任务,假设他们都需要从数据库中检索大量的数据,主要的单线程继续向这些工作人员提出新的请求,这些请求将在哪里去? 它有一个内部任务quese来存储这些请求?

JavaScript的事件循环问题

我不知道事件循环如何在JavaScript中工作,我正在使用node.js,但我想同样的问题适用于浏览器。 我有一些asynchronous调用(比方说setTimeout或$.ajax或fs.readFile ),一段时间后,事件循环执行callback 现在当callback执行时,幕后会发生什么? 当它调用asynchronous的东西时,它会复活它使用的堆栈吗? 在实践中callback所在的上下文是什么? 它是如何工作的? 编辑 :谢谢,我看..只是一个问题,事件循环如何“记住”callback的范围?

Node.js中的单线程和事件循环

首先,我首先尝试了解什么是Node.Js。 我有两个问题。 第一个问题 从费利克斯的文章中,它表示“同时只能有一个callback触发,在callback完成执行之前,所有其他的callback都必须排队等候”。 然后,考虑下面的代码(从nodejs官方网站复制) var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8124, "127.0.0.1"); 如果同时收到两个客户端请求,则表示以下工作stream程: 首先接收到http请求事件,接收到第二个请求事件。 一旦收到第一个事件,第一个事件的callback函数正在执行。 同时,第二个事件的callback函数必须等待。 我对吗? 如果我是对的, Node.js如何在非常短的时间内控制数千个客户端请求。 第二个问题 术语“事件循环”主要用在Node.js主题中。 我从http://www.wisegeek.com/what-is-an-event-loop.htm了解了“事件循环” 事件循环(或主循环)是程序中的一个构造,它控制和分派事件之后的事件。 初始事件可以是任何东西,包括按下键盘上的button或点击程序上的button(在Node.js中,我认为最初的事件将是http请求,db查询或I / O文件访问)。 这被称为循环,不是因为事件连续发生,而是因为循环准备事件,检查事件,调度事件,并重新从头开始。 我对第二段特别是“ 重复这个过程 ”这个短语有冲突。 我接受上面的问题上面的http.createServer代码是绝对“事件循环”,因为它重复监听http请求事件。 但是我不知道如何识别下面的代码是事件驱动还是事件循环。 除了db查询完成后触发的callback函数,它不会重复任何操作。 database.query("SELECT * FROM table", function(rows) { var result = rows; }); 请让我听听你的意见和答案。

运行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)。 更新:我想从运行节点进程内部执行此操作。