nodejs之异步I/O

今晚有空看了一下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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值