【发布时间】:2015-07-05 10:08:53
【问题描述】:
我正在使用 Linux aio (io_submit() / io_getevents()) 进行文件 I/O。由于某些操作没有 aio 等效项(open()、fsync()、fallocate()),因此我使用了一个可能会阻塞而不影响主线程的工作线程。我的问题是,我应该将close() 添加到此列表中吗?
所有文件都在 XFS 上使用O_DIRECT 打开,但我对这个问题的一般答案以及关于我选择的文件系统和打开模式的具体答案都很感兴趣。
请注意,为close() 使用工作线程并非易事,因为在清理路径中经常调用close(),这不是启动工作线程请求并等待它的好地方。所以我希望close() 在这种情况下是非阻塞的。
对于这个问题,“阻塞”是指等待 I/O 操作,或者等待某个只有在 I/O 操作完成时才释放的锁,但不包括页面错误服务。
【问题讨论】:
-
通过粗略阅读代码,看起来
close()可能会阻塞某些文件系统,但不会阻塞其他文件系统。所以我想我不会得到明确的答案。