Если вы говорите о POSIX_FADV_WILLNEED
:
posix_fadvise
уже асинхронно.Таким образом, он запускает механизм ядра, чтобы начать подкачку данных в фоновом режиме, но на самом деле он не ждет, пока какие-либо данные будут прочитаны.Он возвращается немедленно.
Другими словами, posix_fadvise
уже является механизмом параллелизма, поэтому создание собственных потоков для его вызова не бессмысленно.И нет никакого способа «переупорядочить» вызовы, потому что, как только они будут переданы ядру, ядро решит, как переупорядочить обращения к диску.
Если выочень хочется накатить свои собственные, просто сделайте так, чтобы ваши потоки делали блокирующие вызовы read () снова и снова, чтобы читать блоки маленького размера (например, 8k).(То есть последовательно последовательно считывайте один и тот же буфер 8 КБ. Использование этого же буфера сохранит его в кэше L1 и позволит избежать ненужного забивания шины памяти.) Это заполнит кэш страницы и даст вам некоторый контроль над тем, когда это происходит.*
Я немного скептически отношусь к тому, что вашему приложению нужен такой механизм, хотя ...