理解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

你可能感兴趣的:(理解Node.js的异步非阻塞I/O模型)