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 通过请求回调完成

全部评论

相关推荐

2024-11-26 18:15
门头沟学院 后端
M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务