对后台服务器编程不清楚,通过在网上查资料也就大概有写了解。
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