如何在I / O复用中写入块?

时间:2012-03-28 21:15:58

标签: c asynchronous io epoll multiplexing

我正在学习使用epoll,poll等编写非阻塞服务器和客户端应用程序,并遇到了这个事件标志:

  

POLLOUT:                        现在写作不会阻止。

我理解阻塞读取的概念。但什么是阻止写入?

2 个答案:

答案 0 :(得分:3)

如果您以比另一方正在读取的更快的速度写入管道,套接字或终端之类的设备,最终您将填充相关的内核缓冲区,后续写入将阻塞,直到另一方读取某些数据侧。

答案 1 :(得分:2)

在任何I / O操作中,都存在需要跳转到硬盘(或其他慢速I / O设备)和返回的可能性。 “阻塞”呼叫只是在往返I / O完成时等待的呼叫 - 同时,您的呼叫。所以,就像你可以等待阅读一样,你也可以等待写作。

这对于传统应用程序通常不太有用 - 您想告诉操作系统编写您的数据,然后它不再是您的问题了。当您尝试保证存储在I / O设备(例如硬盘)上的数据完整性(例如在关系数据库系统中)时,它就成了您的问题。 (请注意,阻塞并不是保证写入完成的唯一方法。另请注意,随着计算机日益复杂,有多层缓存可能会或可能不会干扰实际阻塞。)

相关问题