首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘write ()’是异步写入吗?

‘write ()’是异步写入吗?
EN

Unix & Linux用户
提问于 2018-10-13 23:09:34
回答 1查看 3.5K关注 0票数 1

从操作系统概念出发

影响I/O性能的另一个问题是对file系统的写入是同步发生还是异步发生。同步写入按磁盘子系统接收它们的顺序进行,而写入不被缓冲。因此,调用例程必须等待数据到达磁盘驱动器才能继续。在异步写入中,数据存储在缓存中,控制返回给调用方。大多数写都是异步的。然而,元数据写入,除其他外,可以是同步的。操作系统经常在open系统调用中包含一个flag,以允许同步执行写入的进程请求。例如,数据库将此特性用于原子事务,以确保数据以所需的顺序达到稳定的存储。

  1. 在同步写入中,“写入不缓冲”。同步写入和直接I/O是相同的概念吗?
  2. “操作系统经常在open系统调用中包含一个flag,以允许进程同步执行写入的请求。”通过调用哪些函数可以实现同步写入,以及如何调用它们?是open()O_DIRECT吗?
  3. 默认情况下,write()是阻塞的,并在完成对缓冲区缓存的写入时返回,这是否正确?write()是否由引号中的定义同步写入?
  4. aio_write()也称为异步I/O。aio_write()是否异步写入?

谢谢。

EN

回答 1

Unix & Linux用户

发布于 2018-10-13 23:51:07

Re O_SYNC和O_DIRECT,它们不一样:

  • O_SYNC会导致磁盘同步,但是会在缓存中进行,所以您已经读取了缓存。
  • O_DIRECT绕过缓存,但不同步
  • (例如)raid,AFAIK O_DIRECT可能会导致事物被发送到raid,但不低于此。
  • O_SYNC可能会导致完整的磁盘同步,这将导致来自其他分区和其他文件的数据被同步,同时也会刷新硬件缓存。

正在阻塞,是和不是:

  • 如果文件系统没有同步挂载,那么只要数据被复制到内核,它就会返回。只要内核中有空闲的缓冲区空间,它就会是即时的。一旦没有更多的缓冲区空间,它就会被阻塞,直到存在为止。
  • 如果文件系统以同步方式挂载,那么它将阻塞。

Re open,来自man 2 open

代码语言:javascript
复制
   O_SYNC Write operations on the file  will  complete  according  to  the
          requirements  of  synchronized I/O file integrity completion (by
          contrast with the synchronized  I/O  data  integrity  completion
          provided by O_DSYNC.)

有关这方面的更多信息,请参见手册页。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/475328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档