2.20 IO总结 NIO BIO AIO select,poll,epoll
个人总结面试用,全部来自网络
stream和channel: stream不会自动缓冲数据,channel会自动利用系统提供的发送缓冲区、接收缓冲区(更为底层) stteam仅支持阻塞API,channel同时支持阻塞、非阻塞API,可以配合Selector实现多路复用 二者都为全双工,即读和写可以同时进行
来自https://blog.csdn.net/weixin_45902285/article/details/121177764
IO分为磁盘IO与网络IO
常见IO模型
同步阻塞IO 同步非阻塞IO 异步IO 事件驱动IO IO多路复用 OS中主要分为等待数据和复制数据两大部分
同步阻塞IO:,read后一直阻塞等待,直到返回数据 用在客户端连接量不多的情况下使用。 同步非阻塞IO:read后如果发现没后数据,会一直read直到发现数据。资源消耗似乎很大。 IO多路复用:先select、poll、epoll看看是否数据准备好了,准备好了在调用read复制数据,read过程还是阻塞的 异步IO:不同于同步IO,异步IO有两个线程,一个申请数据,一个回调数据。
select poll epoll区别
三者都用在io多路复用上,。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作,但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的
select:select通过轮询的方式来进行判断是哪个线程需要IO执行,问题是处理的数据越多,轮询的时间会越长,32位最大连接数fd一般是1024,64位是2048 扫描的是文件描述符集合 poll:与select的区别是基于链表来存储数据(不是集合),所以没有最大连接数限制。 epoll:类似于事件驱动,不再需要轮询,只有活跃可用的FD才会调用callback函数并且使用mmap减少复制开销 区别总结: 1.最大连接数上,select有最大,epoll也有但很大,poll没有 2效率上,epoll高很多,因为只关注活跃fd 3.消息传递方式,select和poll都需要内核拷贝操作,epoll通过内核和用户共享一块内存来实现。
https://blog.csdn.net/wteruiycbqqvwt/article/details/90299610
BIO 同步阻塞IO,read后一直阻塞等待,直到返回数据 用在客户端连接量不多的情况下使用。
NIO NIO有一个多路复用器selector,请求会注册到多路复用器selector上,之后多路复用器通过轮询,轮询到有IO请求是会启动一个线程处理。(多路复用或同步非阻塞)
NIO和传统IO的区别:NIO面向 IO是面向流的,NIO是面向缓冲区的
AIO 通过请求回调完成