我只是对“同步/异步 I/O”和“阻塞/非阻塞 I/O”感到困惑。我想“同步 I/O”总是意味着某种阻塞 I/O,比如读/写,它们是阻塞操作,所以它们是“同步 I/O”。
请大家帮忙指正!
最佳答案
“异步”或“非阻塞”I/O 实际上是同义词。但是,如果我们使用 Linux 术语,“阻塞”和“同步”I/O 是不同的。
“阻塞”只是告诉您系统调用不会返回,直到内核记录了数据...某处。无法保证在意外断电或硬件故障的情况下该记录会持续存在;例如,它可以只是一个预写缓存——因此您的阻塞调用可以在当时运行的其他进程可以看到写入但如果发生电源故障时该写入将丢失的位置返回。
O_SYNC
意义上的“同步”告诉您系统调用不会返回,直到数据实际持久化到硬件。
因此:所有同步 I/O 都是阻塞的,但并非所有阻塞 I/O 都是同步的。
关于linux - "synchronized I/O"总是意味着 "blocking I/O"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42591568/