nodejs异步I/O和事件循环
来源:互联网 发布:淘宝网店授权书模板 编辑:程序博客网 时间:2024/05/16 04:50
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
读取文件完毕,将消息压入消息队列(消息中含有文件内容或者是出错信息)事件循环取得消息,执行回调
程序退出。
阅读全文
1 0
- nodejs异步I/O和事件循环
- nodejs 异步I/O和事件驱动
- NodeJS中的异步I/O、事件驱动
- Nodejs 异步 I/O
- nodejs-异步I/O
- NodeJS -- 异步I/O
- nodejs之异步I/O
- NodeJS异步I/O解析
- 深入浅出NodeJS——异步I/O
- nodejs 非异步I/O API
- node.js(4)异步式I/O与事件式编程 nodejs文件读取
- 同步I/O 和 异步I/O
- 同步I/O和异步I/O
- 连网和异步 I/O
- 连网和异步 I/O
- 异步非i/o操作和异步i/o
- 15.2 asyncio--异步I/O事件库
- [读书笔记]深入浅出NodeJS——Node中的异步I/O
- 中缀和后缀表达式之间的转换
- hive distinct groupby等实现原理
- 组件
- WPF仿QQ聊天框表情文字混排实现
- 使用RecyclerView + ViewPager 的两个大坑!
- nodejs异步I/O和事件循环
- ant使用教程-svn篇
- AndroidManifest配置之uses-feature
- Flutter实战一Flutter聊天应用(二)
- HDU 2827 The Evaluation of Determinant 题解
- Python生成器
- python requests 高级用法 -- 包括SSL 证书错误的解决方案
- 功能强大的最新HTML5特效实例
- jni生成头文件和编译so文件