Когда мы должны использовать разброс / сбор (вектор) IO? - PullRequest
4 голосов
/ 22 августа 2010

Файловая система Windows поддерживает разброс / сбор IO . (Конечно, другая платформа поддерживает)
Но я не знаю, когда мне использовать механизм ввода-вывода.

МожетВы объясните мне правильный случай?

И какую выгоду мы можем получить от использования механизма ввода-вывода? (Просто небольшой запрос ввода-вывода?)

Ответы [ 4 ]

5 голосов
/ 23 августа 2010

Вы используете Scatter / Gather IO, когда выполняете много случайных (то есть не последовательных) операций чтения / записи и хотите сэкономить на переключениях / системных вызовах контекста - Scatter / Gather является формой пакетирования в этом смысле. Однако, если у вас нет очень быстрого диска (или, скорее всего, большого массива дисков), стоимость системного вызова незначительна.

Если бы вы писали сервер базы данных, вы могли бы позаботиться об этом, но что-либо меньшее, чем обычная машина, обрабатывающая тысячи или миллионы запросов в секунду, не принесет никакой пользы.

5 голосов
/ 18 сентября 2010

Пол - одно дополнительное примечание: еще одно преимущество заключается в том, что вы одновременно отправляете несколько запросов драйверу диска.Затем водитель может сортировать запросы и выдавать их в оптимальном порядке.Несмотря на то, что время системного вызова мало, время поиска (много миллисекунд) может быть штрафным (это меньше 1000 операций ввода-вывода / сек).

Комментарий Криса о демонстрации эффективности прагматичен.Мать-природа никогда не лжет.Ну, почти никогда.

1 голос
/ 23 августа 2010

Я полагаю, что вы будете использовать scatter gatehr IO, когда вы (a) подозревали, что у вашего приложения есть узкое место в производительности, и (b) вы создали среду анализа производительности, которая могла бы показать значительное улучшение при ее использовании.

Если вы не можете продемонстрировать доказуемое улучшение, дополнительная сложность кода - это просто риск, и нет волшебного рецепта, который гласит, что при выполнении какого-либо условия приложение автоматически получит значительную выгоду от некоторого умного программирования.

Или, иначе говоря, не основывать основные архитектурные решения на высказываниях «какого-то парня на интернет-форуме». Создайте тест и узнайте.

0 голосов
/ 29 ноября 2010

в posix, readv и writev для чтения или записи в прерывистую память, но для чтения и записи прерывистых диапазонов файлов из прерывистой памяти за один раз вы хотите readx и writex, которые были одним из предложенных добавлений posix

, выполняющихreadx быстрее, чем делает много операций чтения, так как это всего лишь один системный вызов, и он позволяет планировщику дисков иметь больше всего операций переупорядочения. Я помню, как кто-то говорил, что для программы ext2 / 3 / .. fsck они хотели, чтобы это было как есть.знает, какие диапазоны он хочет

...