Сопоставление памяти файла с общим файловым ресурсом SMB приводит к тому, что он полностью передается перед возвратом вызова. Для больших файлов это приводит к зависанию приложения на длительный период времени. Как это исправить?
Правильный ответ - «Использовать X вместо SMB».
Изменить: любое приложение, любой файл. Я не пытаюсь раскрыть конкретный случай. Отображение файла в память - это способ его открытия, чтобы он представлялся приложению как часть рабочей памяти - вы обращаетесь к файлу как к массиву.
Это артефакт реализации операционной системой mmap
, не имеет ничего общего с используемым сетевым протоколом (как бы я ни любил трепаться по SMB ...). SMB более чем способен читать случайные фрагменты из файла, поэтому нет причин, по которым он не может читать фрагменты по запросу. В данный момент у меня нет SMB-сервера, доступного для проверки, но у меня есть сервер NFS, и я просто попытался mmap
файл размером 1,7 ГБ, и он возвращается мгновенно, так что, по крайней мере, это определенно не какое-то внутреннее ограничение в концепции mmap.