mmap + madvise真的是一种异步I/O吗?

Sil*_*ler 7 c c++ linux asynchronous mmap

我正在试图找出是否mmap正在使用文件,然后使用madvise()posix_madvise()使用MADV_WILLNEED/ POSIX_MADV_WILLNEED实际触发后台异步I/O以进行预读.该手册页madvise不指定这是否是如此-的实际行为madvise是左大多不清楚,为了允许执行的灵活性.

但是,当调用madvise()with 时,任何实际的主流POSIX实现(如Linux)是否实际执行异步文件I/O MADV_WILLNEED?我似乎无法得到任何关于此的可靠信息. 这个问题表明它至少在Linux上,即使它不理想,因为没有回调机制.

本书摘录声称posix_fadvisePOSIX_FADV_WILLNEED会做异步读取提前,但没有提及是否madvise()做异步读.

此外,似乎"预读"I/O的整个概念实际上没有任何意义,除非它是异步的.如果它是同步的,它只是让用户应用程序阻止预读,而不是后来实际读取文件时,这似乎不是一个特别强大的优化.

因此,不madvise()MADV_WILLNEED任何主流平台(如Linux)实际做异步预读?

Mar*_*son 0

一般来说,您应该假设 m* 函数不会执行异步预读。