【发布时间】:2017-03-04 03:01:19
【问题描述】:
我只是对“同步/异步 I/O”和“阻塞/非阻塞 I/O”感到困惑。我想“同步 I/O”总是意味着某种阻塞 I/O,比如读/写,它们是阻塞操作,所以它们是“同步 I/O”。
请帮忙指正!
【问题讨论】:
标签: linux io synchronized
我只是对“同步/异步 I/O”和“阻塞/非阻塞 I/O”感到困惑。我想“同步 I/O”总是意味着某种阻塞 I/O,比如读/写,它们是阻塞操作,所以它们是“同步 I/O”。
请帮忙指正!
【问题讨论】:
标签: linux io synchronized
“异步”或“非阻塞”I/O 实际上实际上是同义词。但是,如果我们使用 Linux 术语,“阻塞”和“同步”I/O 是不同的。
“阻塞”只是告诉你系统调用在内核记录数据之前不会返回...某处。无法保证此记录在意外断电或硬件故障的情况下是持久的;例如,它可以只是一个预写缓存,因此您的阻塞调用可以在当时运行的其他进程可以看到写入的点返回,但如果发生电源故障,该写入将丢失。
O_SYNC 意义上的“同步”告诉您在数据真正持久化到硬件之前系统调用不会返回。
因此:所有同步的 I/O 都是阻塞的,但并非所有的阻塞 I/O 都是同步的。
【讨论】: