Nio学习

http://www.iteye.com/topic/834447  这个讲解的 不错,该说的都说了。  下面我们配个例子来说下。

首先是 IP协议族 这个我想大家都比较熟悉了

Tcp 状态机

 

 

 

这个图是我们的核心。 我们来比较一下五种 IO模型

 

 

UNIX 网咯编程给出了五个网络模型,其中前四个都是同步模型,  最后一个是异步模型

 

可以由阻塞阶段看出五个模型的不同。   具体区别请看图。

 

 

 

NIO带来了什么

 

—事件驱动模型
—避免多线程
—单线程处理多任务
—非阻塞IO,IO读写不再阻塞,而是返回0
—基于block的传输,通常比基于流的传输更高效
—更高级的IO函数,zero-copy
—IO多路复用大大提高了java网络应用的可伸缩性和实用性

 

以下情况nio 不一定更快

—1.客户端应用
2.—连接数<1000
3.—并发程度不高
—4.局域网环境下
 
 
 
这是boyan PPT里提出的问题。
 
在传统的CS结构系统中, Server端一般开辟线程池为客户端提供服务,但是当并发量很高的时候,并发服务线程个数不够,所以传统服务中有严重的瓶颈。现在我可以用NIo提供的特性来解决问题,比如我们可以通过IO多路复用来解决问题。下面说下上面4个场景为什么更快
 
1.其实上面4个问题原因差不多,
 
传统的阻塞IO中 当进程需要数据的时候提出 recvfrom()方法 此时由于无数据会使线程阻塞, 让出CPU资源供其它线程使用。 如果采用非阻塞IO ,系统会反复调用recvfrom,直到数据准备好,这样会耗费大量资源。所以在一般情况下阻塞io的效率要优于非阻塞IO。
 
但是当并发访问量很大的时候,我们基本上每次调用recvfrom都会有数据准备好,所以减少了无端的线程上下文切换,这种IO多路复用提高了我们的效率。
 
 
 
 
 
 
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值