2012-03-28 22 views

回答

2

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

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

+0

在UNIX的意义上,磁盘文件不会执行* block * - 它们被认为是“快速”,这意味着进程进入磁盘等待状态而不是睡眠。 'epoll()'总是会为磁盘文件报告POLLOUT(和'POLLIN')。 – caf 2012-03-29 11:34:42

3

如果您以比另一方读取的速度快的速度写入管道,套接字或终端设备,最终会填满相关的内核缓冲区,随后的写入操作将阻塞,直到某些数据被读取另一边。