linux - "synchronized I/O"总是意味着 "blocking I/O"吗?

标签 linux io synchronized

我只是对“同步/异步 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/

相关文章:

linux - httpd.service 的作业失败

Java Runtime 在程序内部执行与在命令行中执行不同的程序?

io - Lua: io.read() 不适用于长字符串

C++ 打开一个文件并写入文件的任意位置

java - 使用谷歌应用引擎将文件上传到 blobstore 时出现 http 400 错误

java - 为什么通常不推荐客户端锁定?

linux - 如何在 Linux 上启动时自动启动该应用程序?

linux - 在 linux 中显示文本的工具,powerpoint 样式

Java:帮助设计解决由 SQLite 引起的死锁

java - Java 中的同步块(synchronized block)如何工作?变量引用或内存被阻塞?