“同步I / O”是否意味着“阻塞I / O”?

我只是混淆了“同步/asynchronousI / O”和“阻塞/非阻塞I / O”。 我认为“同步I / O”总是意味着某种阻塞I / O像读/写,它们阻塞操作,所以它们是“同步I / O”。

请帮忙纠正!

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

“阻塞”只是告诉你,系统调用将不会返回,直到内核已经记录数据…在某个地方 。 在发生意外断电或硬件故障的情况下,不能保证这个记录是持久的; 例如,它可以简单地写为缓存,所以你的阻塞调用可以返回到当前运行的其他进程可以看到写入的地方,但是如果发生电源故障,写入的地方将会丢失。

O_SYNC意义上的“同步”告诉你,系统调用将不会返回,直到数据实际上坚持硬件


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