nodejs之异步I/O

来源:互联网 发布:自动操作软件 编辑:程序博客网 时间:2024/05/20 08:44

今晚有空看了一下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是个高性能的平台,通用性更大。


0 0
原创粉丝点击