1
546L5LiK6ZOt 2021-05-10 00:51:30 +08:00 via Android
select 底层实现不一定是轮询。我记得 linux 下是基于 epoll:网卡收到数据包,会触发中断,操作系统会唤醒监听这个端口的线程。
|
2
wellsc 2021-05-10 03:25:37 +08:00 via iPhone
@546L5LiK6ZOt epoll 是基于 select 优化的呀,两个都是多路复用的实现
|
3
uselessVisitor 2021-05-10 08:38:30 +08:00
啊? NIO 不是用的 IO 多路复用模型吗。。不一样吗。。
|
4
zardly666 2021-05-10 09:04:43 +08:00
多路复用的优化是 select --> poll --> epoll
select,poll 实现需要自己不断轮询所有 fd 集合 epoll 会直接把就绪的 fd 放进链表,只需要轮询就绪链表。 |
5
Frankhong OP NIO 和多路复用 IO 到底是什么关系啊,我感觉是 NIO 里用到了多路复用技术。但我查到资料都说有 5 种 IO 模型:阻塞式 IO,非阻塞式 IO,多路复用 IO,信号驱动式 IO 和异步 IO 。这里的“非阻塞式 IO(Non-blocking IO)”是不是不等同于 NIO 啊?
|
6
araraloren 2021-05-10 11:48:21 +08:00
@Frankhong NIO 只是一个名字,他叫 JIO 也没什么关系。。
|
7
linoder 2021-06-22 02:02:20 +08:00 via Android
你理解的没错 只是三者区别在于 这个一直跑的线程如何快速感知到对应文件描述符就绪也就是你端口有数据 select poll epoll 就是调度这些借口的茴字几种写法
至于多路复用 先理解不多路时候怎么做 一个接口一个线程 没毛病 线程多了又浪费又耗资原 那就一个线程管理多个借口 就多路复用了 |