系统间的通信(BIO,NIO,AIO)

类比辅助理解

餐厅点餐
BIO : 一个客人来了, 就派一个服务员去;
NIO : 一个客人来了, 告诉他点好菜之后再叫服务员;
AIO : 一个客人来了, 给他一个本子, 把要点的菜写好了, 再叫服务员;

站在老板的立场,对服务员的效率的提升是差异明显的.
BIO是一个连接一个线程。
NIO是一个请求一个线程。
AIO是一个有效请求一个线程。

同步阻塞IO (BIO)

阻塞方式,只有当读到了流或将流写入操作系统后,才会释放资源.

Thread-Per-Connection的缺点:

  • Efficiency: Threading may lead to poor performance due to context switching, synchronization, and data movement [2];
  • Programming simplicity: Threading may require complex concurrency control schemes;
  • Portability: Threading is not available on all OS platforms.

同步非阻塞IO (NIO)

事件驱动思想,Reactor模式.

我们知道Reactor模式首先是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers;这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler。如果用图来表达:
这里写图片描述

缺点:

  • 复杂
  • Channel共享, 如果出现长时间读写, 会影响其他chanel
  • 数据的接收和发送都占用了用户态, 能否借助操作系统的异步读写

异步IO方式(AIO)

事件驱动思想, 采用Proactor模式.省去了NIO中程序要遍历事件通知队列(selector)的代价. 比如windows中IOCP和Linux中epoll实现的AIO。

总结

BIO是一个连接一个线程。
NIO是一个请求一个线程。
AIO是一个有效请求一个线程。

参考1

参考

参考 compare

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值