горутинам (допустим 8 горутин считывает по 8 мб одновременно, использую байтовый сдвиг) потом они отправляют данные в канал или же одна горутина считывает сразу 64 мб и тоже отправляет в канал?
потому что чтение всё равно будет синхронным?
Потому что любое буферизованное чтение идёт в page cache. Если страниц нет, то приложение будет заблокировано на время пока страницы поднимаются с диска в page cache. И любое чтение меньше readahead window(по дефолту 128кб) будет приводить к чтению с диска этих 128кб. Через fadvise/madvise можно попросить ядро подтянуть нужные данные в page cache.
А есть книжка хорошая по ос с этим?
Обсуждают сегодня