异步式I/O & 事件式编程

异步式I/O(非阻塞式I/O): 当线程遇到I/O(磁盘读写或网络通信统称为I/O操作),将I/O请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时,以事件的形式通知执行I/O操作的线程,线程会在特定时候处理这个事件。

例子:

文件readfile.js

var fs = require( 'fs');

fs. readFile( 'file.txt', 'utf-8', function( err, data){
if( err){
console. error( err);
} else{
console. log( data);
}
});
console. log( 'end.');

进入文件所在目录运行node readfile.js 

运行结果如下:


先输出了end.  其次才是文件的内容。

fs.readfile 调用时只将异步式I/O请求发送给了操作系统,然后立即执行后面的语句,执行完后进入事件循环监听事件。

当fs接收到I/O请求完成时,事件循环会主动调用回调函数以完成后续工作。


事件

JavaScript 中事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。

Node.js所有的异步I/O操作在完成时都会发送一个事件到事件队列。 事件是由EventEmitter对象提供。

Node.js没有显示的事件循环,Node.js的事件循环对开发者不可见,有libev库实现。

fs.readFile 和 http.createServer的回调函数都是通过EventEmitter来实现的。

Node.js 程序是由事件循环开始的,到事件循环结束,所有的逻辑都是事件的回调函数,所以程序入口就是事件循环第一个事件的回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值