node.js,说简单点,基于Google V8引擎的,运行在服务器端的JavaScript。node
具备单线程、非阻塞IO、事件驱动等特性。数据库
学习的这几天,感觉最深的仍是非阻塞IO。因为采用Google V8引擎,node.js能够异步处理数据,举个最简单的例子。编程
1
2
3
4
5
6
7
8
|
setTimeout(function(){console.log('5')},5000);
console.log('1');
function test(){
setTimeout(function(){console.log('2')},1000);
}
test();
console.log('3');
setTimeout(function(){console.log('4')},2000);
|
若是是阻塞IO,程序按行顺序执行,每行执行完再去执行下一行。服务器
运行结果为5,1,2,3,4。运行时间约为8000ms。异步
node.js采用非阻塞IO,程序按顺序执行,但并不等待当前代码执行完毕,即IO不阻塞。学习
1
2
3
4
5
6
|
[root@asxzy nodejs]# node test.js
1
3
2
4
5
|
运行结果为1,3,2,4,5。运行时间约为5000msgoogle
这就是非阻塞IO所带来的好处,永远不会产生死锁,由于它自己没有锁机制。spa
同时,非阻塞IO也对变成带来的一些问题:.net
过程式编程中,有不少状况下是本句代码要求先前的代码执行完毕,如要调用以前处理的数据结果、和数据库交互等。线程
node.js中能够采用回调方式解决这个问题。
好比
1
|
setTimeout(function(){console.log('5')},5000);
|
在执行完5000ms的Timeout以后,调用function(){console.log(’5′)}
很好理解了吧!!