系统间的通信(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
- 系统间的通信(BIO,NIO,AIO)
- 基于消息实现系统间的通信(BIO,NIO,AIO)学习。
- 基于消息实现系统间的通信(BIO,NIO,AIO)
- 基于消息实现系统间的通信(BIO,NIO,AIO)
- JavaSocket通信--BIO,NIO,AIO
- 网络通信模型之BIO与NIO、AIO的区别
- BIO,NIO,AIO的理解
- BIO/NIO/AIO的文章
- JAVA的BIO,NIO,AIO
- bio nio aio的区别
- BIO、NIO、AIO的关系
- BIO,NIO,AIO的区别
- BIO,NIO,AIO的区别
- BIO,NIO,AIO的区别
- BIO,NIO,AIO的理解
- BIO、NIO、AIO的理解
- (5)Socket的三种通信模型--BIO,NIO和AIO
- BIO, NIO, AIO(转)
- ngrok安装使用
- python-print的区别(2和3)
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- 第五周项目2-游戏中的角色类(1)
- CSS3 animation-- 写一个带有回弹效果的模态对话框----1
- 系统间的通信(BIO,NIO,AIO)
- SpringMVC之@RequestBody详解
- You Don't Need jQuery
- Totop标签如何实现
- 在使用echart时使用异步方法来填充数据
- 魔法猪学院(k短路问题)
- socket编程与TCP/UDP
- 面向对象程序设计上机练习一(函数重载)
- CCF-201403-3-命令行选项