今晚有空看了一下nodejs。
只要有两个知识点吧。
其中一个是定时器。两个函数。setImmediate(callback)和process.nextTick(callback).这两个函数都是要求立即出发callback时间。下面来看看用法。
setImmediate( function() {
console.log('2');
});
process.nextTick( function() {
console.log('3');
});
console.log('1');
结果是1,3,2;初步结果来看,显然,是process.nextTick优先级较高。其实,process.nextTick(callback).的回调函数放在数组上,而setImmediate(callback)结果放在链表上。首先是数组上的回调函数先执行完。然后才到链表。下面例子为证。
setImmediate( function() {
console.log('5');
});
setImmediate( function() {
console.log('6');
process.nextTick( function() {
console.log('6.1');
});
});
setImmediate( function() {
console.log('7');
});
process.nextTick( function() {
console.log('2');
});
process.nextTick( function() {
console.log('3');
setImmediate( function() {
console.log('3.1');
});
});
process.nextTick( function() {
console.log('4');
});
console.log('1');
结果是 1, 2, 3 ,4, 5, 6, 6.1, 7, 3.1
于是,结果如下:
process.nextTick(callback)是不断执行的。而setImmediate(callback)会停下来将内部实现完。
---------------------------------------------------------------------------------------------------------------------------------------------------
第二个知识点。
下面是几种经典的服务器模型
1.同步:同步式地处理每一条请求,一次只能处理一个,所以其余请求都处于等待状态(性能不太好)。
2.请求---进程:每次开一次一个进程,这样可以处理很多请求,但是可扩展性不强(系统资源有限)
3.请求---线程:尽管线程比进程要轻得多,但是每个线程要占用一定内存,多人请求的时候很容易扛不住,效果比第二点要好,但是美中不住。
第三种方案是Apache所采纳的模型。nodejs通过事件驱动的方式,无需为一次请求单独开启一个线程,省去了创建开销还有切换花费,这都是很昂贵的。这就是nodejs性能较好地原因之一。
知名服务器nginx,就是采用和nodejs一样的事件驱动,所以性能很好,有取代Apache的势头。但nginx只适合做服务器,而nodejs是个高性能的平台,通用性更大。