BIO

优点 可以接收更多连接 缺点 线程内存消耗 cpu调度消耗

NIO

优点 规避多线程问题 缺点 C10K,弊端: 假设 1万个连接 只有一个发来数据每循环一次 必须向内核发送1万次recv的系统调用 那么这里有9999次是无意义的,浪费的,消耗时间和资源的(用户空间向内核空间的循环遍历,复杂度在系统调用上)

多路复用器

select 1024限制 ,poll 无限制
epoll
jdk1.5及以上 epoll_create 内核中开辟空间FD,红黑树 epoll_ctl add(accept) epoll_wait 阻塞(timeout) 等待文件描述符上的事件
AIO JDK1.7中,这部分内容被称作NIO.2 AsynchronousSocketChannel read/write方法都是异步的,完成后会主动调用回调函数 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

IO模型模型学习

三者应用场景

BIO 连接数目比较小且固定的架构,对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO 连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

转载请说明出处

标签: epoll, 多路复用


阿里云优惠主机

添加新评论

免责声明
本博客部分内容来自于互联网,不代表作者的观点和立场,如若侵犯到您的权益,请联系[email protected]。我们会在24小时内进行删除。