Linux中的CFQ IO调度程序有一组请求队列。来自进程的同步请求进入单独的每个进程请求队列,而所有异步请求都进入一组共享队列。
请求如何分类为同步或异步?此上下文中的异步是指使用内核AIO完成的IO吗? (和所有其他正常的read()/ write()和缓冲的fread()/ fwrite()被视为同步)
答案 0 :(得分:1)
同步请求是流程在完成之前被阻止的那些请求,异步请求是流程可以与其完成并行继续的请求。
通常,程序所做的所有正常读取都是同步的,因为在它拥有所请求的数据之前,进程无法前进。然而,写入本质上通常是异步的 - 只要保证进程看到它已执行的所有写操作(由缓冲区/页缓存处理),该进程就不关心数据何时实际写入存储设备一旦它调用了写系统调用。
从那以后它变得复杂:fsync()系统调用是一个同步请求,对于某些元数据更改对新闻文件系统的调用也是如此,但对于非日志文件系统调用则不然等等......