Введение

Компьютерная программа, производительность которой в значительной степени зависит от времени ожидания операций ввода/вывода. В информатике, термин "I/O-ограниченность" (I/O bound) описывает ситуацию, когда время, необходимое для завершения вычисления, определяется главным образом временем, затрачиваемым на ожидание завершения операций ввода/вывода, в отличие от "CPU-ограниченности" (CPU bound). Это происходит, когда скорость поступления данных ниже скорости их обработки, то есть на запрос данных уходит больше времени, чем на их обработку.

Вводы и выводы связаны как присущая проблема в вычислительной технике

Ограниченное состояние ввода-вывода было выявлено как проблема в вычислительной технике практически с момента её возникновения. Архитектура фон Неймана, используемая многими вычислительными устройствами, предполагает несколько возможных решений, таких как реализация логически отдельного центрального процессора, который, помимо хранения инструкций программы, также извлекает фактические данные, как правило, из основной памяти, и использует эти более доступные данные для работы. По завершении процесса результаты записываются обратно в исходное хранилище (обычно в основную память). Поскольку данные должны перемещаться между процессором и памятью по шине с ограниченной скоростью передачи, возникает явление, известное как «узкое место фон Неймана». Проще говоря, это означает, что пропускная способность данных между процессором и памятью, как правило, ограничивает общую скорость вычислений. С точки зрения фактической технологии, составляющей компьютер, «узкое место фон Неймана» предсказывает, что ускорить выполнение вычислений процессором легче, чем обеспечить его данными с необходимой скоростью. В последнее время «узкое место фон Неймана» стало особенно заметным. Философия проектирования современных компьютеров основана на физическом разделении центрального процессора и основной памяти. Возможность обеспечить высокую скорость передачи данных внутри процессора обусловлена перемещением данных между его компонентами на очень короткие расстояния. Однако физическое разделение процессора и основной памяти требует использования шины данных для передачи данных на сравнительно большие расстояния – в сантиметрах и более. Обеспечение достаточной скорости работы этой части системы, чтобы она не отставала от процессора, является серьезной задачей для разработчиков.

Сравнение с CPU-bound

Предположим, у нас есть один процесс, интенсивно использующий процессор, и множество процессов, интенсивно выполняющих операции ввода-вывода. По мере выполнения процессов в системе может возникнуть следующий сценарий. Процесс, интенсивно использующий процессор, получает процессор и удерживает его. В это время все остальные процессы завершают операции ввода-вывода и переходят в очередь готовности, ожидая процессор. Пока процессы находятся в очереди готовности, устройства ввода-вывода простаивают. В конечном итоге процесс, интенсивно использующий процессор, завершает свой временной интервал использования процессора и переходит к устройству ввода-вывода. Все процессы, интенсивно выполняющие операции ввода-вывода, которые имеют короткие временные интервалы использования процессора, быстро выполняются и возвращаются в очереди устройств ввода-вывода. В этот момент процессор простаивает. Затем процесс, интенсивно использующий процессор, возвращается в очередь готовности и получает процессор. Снова все процессы ввода-вывода оказываются в ожидании в очереди готовности, пока процесс, интенсивно использующий процессор, не завершится. Возникает эффект "конвоя", когда все остальные процессы ждут, пока один большой процесс освободит процессор. Этот эффект приводит к снижению загрузки процессора и устройств по сравнению с тем, что могло бы быть достигнуто, если бы более короткие процессы выполнялись первыми.