400 028 6601

nodejs中怎么实现事件循环

nodejs中怎么实现事件循环,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

成都创新互联公司长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为安塞企业提供专业的成都网站制作、网站设计,安塞网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

当Node.js启动时会初始化event loop,每个event loop 都会包含按如下六个节点循环,nodejs事件循环和浏览器事件循环完全不一样。

nodejs中怎么实现事件循环

阶段概览

如果event loop 进入了poll阶段,且代码未设定timer,将会发生下面的情况:

如果event loop进入了poll阶段,且代码设定了timer:


setImmediate约定于setTimeout(cb,0)
  • 执行代码1

var fs = require('fs');
var path = require('path');
function someAsyncOperation(callback) {
  // 花费2ms
  fs.readFileSync('./read.txt', callback);
}
var timeoutScheduled = Date.now();
var fileReadTime = 0;
setTimeout(function() {
  var delay = Date.now() - timeoutScheduled;
  console.log(`setTimeout ${delay} ms have passed since I was sheculed`);
  console.log('fileReaderTime', fileReadTime - timeoutScheduled);
}, 10);

someAsyncOperation(function() {
  fileReadtime = Date.now();
  while (Date.now() - fileReadTime < 20) {}
});
  • 执行代码2

var fs = require('fs');
var path = require('path');
function someAsyncOperation(callback) {
  // 花费9ms
  fs.readFileSync('./read.txt', callback);
}
var timeoutScheduled = Date.now();
var fileReadTime = 0;
setTimeout(function() {
  var delay = Date.now() - timeoutScheduled;
  console.log(`setTimeout ${delay} ms have passed since I was sheculed`);
  console.log('fileReaderTime', fileReadTime - timeoutScheduled);
}, 5);

someAsyncOperation(function() {
  fileReadtime = Date.now();
  while (Date.now() - fileReadTime < 20) {}
});
  • 执行代码3

setImmediate(() =>{
    console.log('setImmediate')
},0)

setTimeout(() =>{
    console.log('setTimeout')
},0)

// setTimeout 和 setImmediate的执行顺序不确定
// 因为event loop的启动也是需要时间的,可能执行到poll阶段时已经超过了1ms,此时setTimeout会先执行
const fs = require('fs');
const path = require('path');
fs.readFile(path.resolve(__dirname, '/read.txt'), () => {
  setTimeout(() => {
    console.log('setTimeout');
  }, 0);
  setImmediate(() => {
    console.log('setImmediate');
  }, 0);
});
// 执行顺序是确定的, setImmediate,setTimeout

关于nodejs中怎么实现事件循环问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


分享标题:nodejs中怎么实现事件循环
文章出自:http://mbwzsj.com/article/pcgjhg.html

其他资讯