Возьмите следующий фрагмент кода:
f = open("/mnt/remoteserver/bar/foo.bin", O_RDONNLY);
while (true)
{
byteseread = read(f, buffer, 1000);
if (bytesread > 0)
ProcessBytes(buffer, bytesread);
else
break;
}
Если в приведенном выше примере, скажем, удаленный файл, foo.bin, составляет 1 МБ, и клиент никогда ранее не обращался к нему.Таким образом, это примерно 1000 вызовов «read» для получения всего файла.
Далее, скажем, сервер с каталогом, установленным на клиенте, подключен к Интернету, а не локально.Быстрая пропускная способность для клиента, но с большой задержкой.
Каждый ли вызов "read" вызывает возврат к серверу и обратно для запроса дополнительных данных?Или протокол клиент / сервер распознает, что последующие чтения в удаленном файле часто являются последовательными, и, как таковые, последующие блоки выталкиваются вниз, прежде чем приложение фактически вызовет для него вызов read ().Следовательно, последующие вызовы чтения возвращаются быстрее, потому что данные были предварительно извлечены и кэшированы.
Проводят ли какие-либо оптимизации подобные протоколы современных сетевых файловых систем (NFS, SMB / Samba, другие?Существуют ли сетевые протоколы файловой системы, настроенные для Интернета, которые имеют такие оптимизации?
Я изучаю личный проект, который может включать внедрение сетевой файловой системы через Интернет.Меня поразило, что производительность может быть выше, если уменьшить количество обращений к файлу для ввода-вывода.