理解Node.js的异步非阻塞I/O模型

对后台服务器编程不清楚,通过在网上查资料也就大概有写了解。

Apache对并发请求的处理方式是,对每个请求就创建一个线程处理,这个线程是堵塞的。因为线程的是占用内存的,所以一台服务器能支持的并发线程量是有限的。

node.js是单线程的模型,但是线程是异步非堵塞的

比如下面的例子:

var fs = require("fs");
fs.readFile("./testfile", "utf8", function(error, file) {  
     if (error) throw error;  
     console.log("我读完文件了!");
});
console.log("我不会被阻塞!");

复制上面代码保存为test.js,并在同一目录下新建一个名为testfile的文件,用node命令运行test.js,你将看到以下输出:

    我不会被阻塞!

    我读完文件了!

这显然不符合传统的程序执行顺序,注意,这就是Node.js的非阻塞I/O了。


进行I/O操作,给readFile绑定一个回调函数function(error,file){},并在读取testfile完成后执行回调函数。期间,后面的代码继续执行,不受I/O阻塞。

这就是为什么先看到“我不会被阻塞!”而后看到“我读完文件了!”的缘故。



参考:

http://cnodejs.org/topic/4f50dd9798766f5a610b808a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值