Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Запуск и выключение Разбросанный ввод/вывод

Разбросанный ввод/вывод

В дополнение к традиционным системным вызовам read и write 4.2BSD ввело возможность осуществления разбросанного ввода/вывода (scatter/gather I/O). Разбросанный ввод использует системный вызов readv, чтобы дать возможность поместить результат одной операции чтения в несколько различных буферов. Наоборот, системный вызов writev дает возможность записать несколько буферов в одной неделимой операции записи. Вместо передачи одного буфера и параметра размера, как делается в read и write, процесс передает указатель на массив буферов и их размеров вместе с числом, указывающим размер массива.

Это средство дает буферам в различных частях адресного пространства процесса возможность быть записанными атомарно, без необходимости копирования их в один непрерывный буфер. Атомарные записи необходимы в случае, когда лежащая в основе абстракция основана на записи, такой, как дейтаграммы, которые выдают на каждый запрос записи одно сообщение. Удобна также возможность прочтения одним запросом в несколько различных буферов (например, заголовка записи в одно место, а данных в другое). Хотя приложение может имитировать возможность распределения данных, читая данные в один большой буфер, а затем копируя части в соответствующие места назначения, стоимость копирования из памяти в память в таких случаях часто более чем удваивает время выполнения соответствующего приложения.

Так же как send и recv могли бы быть реализованы как библиотечные интерфейсы к sendto и recvfrom, можно было бы эмулировать read с использованием readv и write с использованием writev. Однако read и write используются так часто, что добавление издержек по их эмуляции не имело бы смысла.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 25 гостей онлайн