我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解nodejs异步I/O和事件循环

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解nodejs异步I/O和事件循环

事件驱动模型

现在我们来看看nodejs中的事件驱动和异步I/O是如何实现的.

nodejs是单线程(single thread)运行的,通过一个事件循环(event-loop)来循环取出消息队列(event-queue)中的消息进行处理,处理过程基本上就是去调用该消息对应的回调函数。消息队列就是当一个事件状态发生变化时,就将一个消息压入队列中。

nodejs的时间驱动模型一般要注意下面几个点:

因为是单线程的,所以当顺序执行js文件中的代码的时候,事件循环是被暂停的。 当js文件执行完以后,事件循环开始运行,并从消息队列中取出消息,开始执行回调函数 因为是单线程的,所以当回调函数被执行的时候,事件循环是被暂停的 当涉及到I/O操作的时候,nodejs会开一个独立的线程来进行异步I/O操作,操作结束以后将消息压入消息队列。

下面我们从一个简单的js文件入手,来看看 nodejs是如何执行的。


var fs = require("fs");
var debug = require('debug')('example1');

debug("begin");

fs.readFile('package.json','utf-8',function(err,data){
 if(err) 
  debug(err);
 else
  debug("get file content");
});

setTimeout(function(){
 debug("timeout2");
});

 
debug('end'); // 运行到这里之前,事件循环是暂停的
同步执行debug("begin") 异步调用fs.readFile(),此时会开一个新的线程去进行异步I/O操作 异步调用setTimeout(),马上将超时信息压入到消息队列中 同步调用debug("end") 开启事件循环,弹出消息队列中的信息(目前是超时信息) 然后执行信息对应的回调函数(事件循环又被暂停) 回调函数执行结束后,开始事件循环(目前消息队列中没有任何东西,文件还没读完) 异步I/O读取文件完毕,将消息压入消息队列(消息中含有文件内容或者是出错信息) 事件循环取得消息,执行回调 程序退出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解nodejs异步I/O和事件循环

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解nodejs异步I/O和事件循环

事件驱动模型现在我们来看看nodejs中的事件驱动和异步I/O是如何实现的. nodejs是单线程(single thread)运行的,通过一个事件循环(event-loop)来循环取出消息队列(event-queue)中的消息进行处理,处
2022-06-04

PHP 异步编程指南:探索事件循环和非阻塞 I/O

异步编程利用事件循环和非阻塞 i/o 来同时处理多个任务。事件循环持续监听来自不同来源的事件,并调用对应的回调函数进行处理。非阻塞 i/o 在后台进行输入或输出操作,让应用程序可以继续执行其他任务。实战案例中,使用 reactphp 创建了
PHP 异步编程指南:探索事件循环和非阻塞 I/O
2024-05-08

nodejs中解决异步嵌套循环和循环嵌套异步的问题

众所周知,nodejs异步和循环对于初学者来说是一个很大的问题,今天我们就一起来了解和解决它当异步和循环同时出现的时候这个问题就会被放大很多倍.庆幸的是,大神们研究出了async这个第三方模块,解决了node中异步金字塔和循环问题async
2022-06-04

庖丁解牛Node.js事件循环:庖丁解牛Node.js事件循环:一探异步编程的艺术

Node.js的事件循环是一个单线程模型,它可以处理并发请求,而不会阻塞主线程,这使得Node.js非常适合处理I/O密集型应用。本文将深入研究Node.js的事件循环,带你了解异步编程的艺术。
庖丁解牛Node.js事件循环:庖丁解牛Node.js事件循环:一探异步编程的艺术
2024-02-03

Node.js事件循环(Event Loop)和线程池详解

Node的“事件循环”(Event Loop)是它能够处理大并发、高吞吐量的核心。这是最神奇的地方,据此Node.js基本上可以理解成“单线程”,同时还允许在后台处理任意的操作。这篇文章将阐明事件循环是如何工作的,你也可以感受到它的神奇。
2022-06-04

我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环

一,node.js的作用, I/O的意义,(I/O是输入/输出的简写,如:键盘敲入文本,输入,屏幕上看到文本显示输出。鼠标移动,在屏幕上看到鼠标的移动。终端的输入,和看到的输出。等等)node.js想解决的问题,(处理输入,输入,高并发 。
2022-06-04

编程热搜

目录