Такой высокопроизводительный ввод / вывод проще всего сделать с mmap
. Это дает ядру гораздо больше свободы для выполнения операций ввода-вывода и планирования времени процессора для вашего приложения. Например, когда вы читаете в 1 МБ, используя ifstream, ядро может вернуться только тогда, когда все данные прочитаны. Но с помощью mmap () данные могут возвращаться постепенно, по мере их доступности.
Однако вы должны понимать, как это происходит. То, что данные находятся в оперативной памяти, не означает, что вы должны обращаться с ними как с произвольной доступностью. Не кормите его до std::sort
. Это коснется случайных частей области mmap, вызывая сбои страниц слева и по центру. В результате вы будете вызывать тяжелые попытки поиска диска для устранения случайных сбоев страниц. Вместо этого mmap()
два входа и объединить их. Поскольку команда mmap сообщает ядру, какие данные вам понадобятся в будущем, ядро будет передавать вам данные настолько быстро, насколько это возможно, а сортировка слиянием вызовет ошибку страницы (т.е. остановку), когда для нее временно не будет данных.