"synchronized I/O" 是否总是意味着 "blocking I/O"?

Does "synchronized I/O" always mean "blocking I/O"?

我只是对 "synchronized/asynchronized I/O" 和 "blocking/non-blocking I/O" 感到困惑。我想 "synchronized I/O" 总是意味着某种阻塞 I/O,比如 read/write,它们是阻塞操作,所以它们是 "synchronized I/O".

请大家帮忙指正!

"Asynchronous" 或 "non-blocking" I/O 实际上是同义词。但是,如果我们使用 Linux 术语,"blocking" 和 "synchronized" I/O 是不同的。

"Blocking" 只是告诉您系统调用不会 return 直到内核记录数据... 某处。无法保证在意外断电或硬件故障的情况下该记录会持续存在;例如,它可以只是一个预写缓存——所以你的阻塞调用可以 return 在其他进程 运行 可以看到写入的地方,但是如果停电了。

O_SYNC 意义上的

"Synchronized" 告诉您系统调用不会 return 直到数据 实际持久化到硬件


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