"同步I / O"总是意味着"阻止I / O"?

时间:2017-03-04 03:01:20

标签: linux io synchronized

我只是对"同步/异步I / O"感到困惑。和"阻塞/非阻塞I / O"。我认为"同步I / O"总是意味着某种类似的阻塞I / O,如读/写,它们阻止操作,因此它们会同步I / O"。

请帮忙纠正!

1 个答案:

答案 0 :(得分:2)

实际上,“异步”或“非阻塞”I / O实际上是同义词。但是,如果我们使用Linux术语,“阻塞”和“同步”I / O是不同的。

“阻止”只是告诉您在内核记录数据之前系统调用不会返回... 某处。在意外断电或硬件故障的情况下,无法保证此记录是持久的;例如,它可以简单地是一个超前缓存 - 所以你的阻塞调用可以在当时运行的其他进程可以看到写入的位置返回,但是如果发生电源故障,那么写入将会丢失。

O_SYNC意义上的“同步”告诉您,在数据实际持久存储到硬件之前,系统调用不会返回。

因此:所有同步I / O都是阻塞的,但并非所有阻塞I / O都是同步的。