Próbuję dowiedzieć się, czy mmap
"ing pliku, a następnie przy użyciu madvise()
lub posix_madvise()
z MADV_WILLNEED
/POSIX_MADV_WILLNEED
faktycznie wyzwala asynchroniczne I/O tła do odczytu z wyprzedzeniem. Numer man pages for madvise
nie określa, czy tak jest - faktyczne zachowanie madvise
pozostaje w większości niejasne, aby umożliwić elastyczność implementacji.Czy mmap + madvise jest formą asynchronicznego wejścia/wyjścia?
Ale czy aktualna główna implementacja POSIX (np. Linux) faktycznie wykonuje operacje wejścia/wyjścia pliku asynchronicznego po wywołaniu madvise()
z MADV_WILLNEED
? Nie mogę uzyskać żadnych wiarygodnych informacji na ten temat. This question sugeruje, że tak, przynajmniej na Linuksie, nawet jeśli nie jest idealny, ponieważ nie ma mechanizmu zwrotnego.
This book excerpt twierdzi, że posix_fadvise
z POSIX_FADV_WILLNEED
zrobi asynchronicznego odczytu z wyprzedzeniem, ale nie wspomina, czy madvise()
robi asynchroniczny czytać dalej.
Co więcej, wydaje się, że cała koncepcja "we-wy" z wyprzedzeniem nie ma żadnego sensu, chyba że jest asynchroniczna. Jeśli był synchroniczny, po prostu tworzy blok aplikacji użytkownika do odczytu z wyprzedzeniem, zamiast później, kiedy faktycznie czyta plik, co nie wydaje się być szczególnie wydajną optymalizacją.
Czy zatem madvise()
z MADV_WILLNEED
faktycznie wykonuje asynchroniczne odczytanie z wyprzedzeniem na dowolnej platformie głównego nurtu (np. Linux)?
W odpowiedzi na pytanie zadane w tytule, nie, nie wydaje mi się uzasadnione, aby scharakteryzować 'mmap()' + 'madvise()' jako formę asynchronicznych operacji we/wy, ponieważ jądro nie jest * zobowiązywał się * do zrobienia czegokolwiek w odpowiedzi na 'madvise()' wywołanie określające 'MADV_WILLNEED' (w przeciwieństwie do sytuacji, gdy poradą jest' MADV_DONTNEED'). Jeśli chodzi o to, czy jakikolwiek system faktycznie wykona asynchroniczny oddźwięk w jakichkolwiek okolicznościach, jestem skłonny przypuszczać, że niektórzy będą, ale nie mogę podać żadnych szczegółów. –
Notatka z nitpickery: Nieblokujące funkcje synchroniczne nie blokują i nie są asynchroniczne, ale są zracjonalizowane, aby rozwiązać ten sam rodzaj problemów, co funkcje asynchroniczne. – Sebivor