为什么 epoll 不支持本地文件(磁盘 io),但是 kqueue 支持?

2020-11-16 10:56:36 +08:00
 aiqier

目前只搜到了这些话,但是看的不是特别懂:

“Kqueue 支持磁盘文件,而 epoll 并不支持所有的文件描述符,它是基于准备就绪模型的。因为磁盘总是基于就绪模型的。”

感觉疑问挺多的,比如为啥非就绪模型就不行,为啥 kqueue 就不用就绪模型。

1480 次点击
所在节点    程序员
1 条回复
user8341
2020-11-16 17:43:13 +08:00
epoll 在文件描述符可进行 I/O 操作时进行通知,而 kqueue 和 IOCP 都在请求的操作完成时进行通知。

-

对于网络来说,可进性 I/O 操作指的是“收到别人发来消息”,此时可以无阻塞地读。
对于磁盘来说,任何时间都可以进性 I/O 操作,但是无法保证非阻塞。它更适用于操作完成通知这种模式。操作完成就是数据已经从磁盘读到内存 buffer 时。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX