Tag: 事件循环

Javascript背景循环

假设我们有一个loop.js文件: longLoop().then(res => console.log('loop result processing started')) console.log('read file started') require('fs').readFile(__filename, () => console.log('file processing started')) setTimeout(() => console.log('timer fires'), 500) async function longLoop () { console.log('loop started') let res = 0 for (let i = 0; i < 1e7; i++) { res += Math.sin(i) // arbitrary computation heavy operation if (i % 1e5 === […]

下一个刻度覆盖function函数将被调用

我需要重写下面的代码 这个函数将在下一个勾号中执行 req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { setTimeout(fn, 5); } : function (fn) { fn(); }; 有了这个, window.require.nextTick = function(fn) { fn(); }; 由于该函数将被立即调用,在这种情况下,它将不会被执行下一个滴答声?

Node.js setImmediate在I / Ocallback之前执行(Event Loop)

看看下面的代码: var fs = require('fs'); var pos = 0; fs.stat(__filename, function() { console.log(++pos + " FIRST STAT"); }); fs.stat(__filename, function() { console.log(++pos + " LAST STAT"); }); setImmediate(function() { console.log(++pos + " IMMEDIATE") }) 当我执行这个代码时,显示以下结果: 正如Node.js 文档所解释的,setImmediate是在I / Ocallback之后执行的,但在本例中,在I / Ocallback之前正在执行setImmediate,我错过了什么?

如何找出事件循环中是否还有事件注册(奖金:多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; }); 请让我听听你的意见和答案。