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

来源:互联网 发布:姓张的网络歌手男歌手 编辑:程序博客网 时间:2024/05/18 07:45

类比辅助理解

餐厅点餐
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
原创粉丝点击