BIO,NIO与多路复用器

介绍IO之前,首先需要了解C10K。
C10K主要讨论了同步,异步,阻塞与非阻塞模型之间的问题。
BIO属于同步阻塞模型
NIO属于同步非阻塞模型
在Linux服务器中,一般不存在异步模型的情况。只有在windows中才会存在异步模型。
Linux之所以不安排异步模型,主要是为了服务的稳定性。这也是为什么Windows系统会出现蓝屏,系统崩溃的原因之一。
BIO执行原理:
application等用户程序去接收或者等待消息时,这种情况会存在阻塞运行。即来一条信息去读取一条信息,信息如果未接收或者读取到,那么就会一直等待,直到有一条新的消息接收到才会进行下一条信息的处理。这种情况就是BIO模型,或者叫同步阻塞模型。
为了提升其性能,一般会将BIO与多线程结合处理消息,让接收到的消息使用线程处理。
NIO执行原理:
NIO模型拿到所有IO连接后会遍历所有的连接,有一条数据过来处理一条数据。这个过程没有阻塞的情况。application用户程序调用接收或发送消息的方法时候,不会阻塞运行。
多路复用器:
多路复用器在NIO的基础上将原本对每一路的IO访问变成如今的,多路复用器访问每一路,用户程序直接访问多路复用器,从而提升程序的性能。而且,NIO在遍历访问IO时,其内部实际是用户态与内核态的不断切换。数量少的时候不会有太大的影响。如果有上万个的访问,那结果可能是暂难性的,这也是NIO性能的瓶颈。
多路复用器只能获取IO的状态,具体的数据还需要程序从IO中获取。
多路复用器selector,一般基于POSIX规范实现(这是实现方式即适用于Linux服务器也适用于Windows服务器)。而Linux服务器中,可选择基于POLL或者EPOLL模型实现
在这里插入图片描述

总结:
同步模型中:用户程序自己完成读/写操作
异步:内核(kernel)完成读/写
阻塞:blocking
非阻塞:Nonblocking
一般情况,Netty底层IO就是使用了同步的阻塞和同步的非阻塞模型。在Linux服务器中,一般都是用的同步模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值