小任班长的博客 - epoll
type: channel
link: https://cnxiaocheng.top/tag/epoll/
items: NIO BIO AIO select poll epoll IO模型个人总结版【精华】

NIO BIO AIO select poll epoll IO模型个人总结版【精华】
type: item
date: 2022-03-13T11:00:00+08:00
description: 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先完成了再通知服务器应用去启动线程进行处理，三者应用场景BIO 连接数目比较小且固定的架构，对服务器资源要求比较高，并发局限于应用中，JDK1.4以前的唯一选择，但程序直观简单易理解。NIO 连接数目多且连接比较短（轻操作）的架构，比如聊天服务器，并发局限于应用中，编程比较复杂，JDK1.4开始支持。AIO连接数目多且连接比较长（重操作）的架构，比如相册服务器，充分调用OS参与并发操作，编程比较复杂，JDK7开始支持。转载请说明出处