Порты завершения ввода-вывода
октября 12 2009 by admin in Обязательный материалWindows 2000 создавалась как надежная ОС, способная управлять приложениями, обслуживающими тысячи пользователей. Исторически существует две модели построения служб.
Модель последовательной обработки Единственный поток ожидает запрос от клиента, передаваемый, как правило, по сети. При поступлении запроса этот поток «пробуждается» и обрабатывает клиентский запрос.
Модель параллельной обработки Один поток ожидает клиентский запрос, а затем создает новый поток для его обработки. Когда созданный поток обрабатывает клиентский запрос, первичный переходит к началу своего цикла и ожидает другой клиентский запрос. Поток, завершивший обработку запроса, «умирает».
Но последовательная модель не обеспечивает полноценной обработки нескольких одновременных запросов — второй запрос будет ожидать, пока не обработается первый. Служба, разработанная на основе такого подхода, не сможет задействовать преимущества многопроцессорных машин. Последовательная модель хороша лишь для простейших серверных приложений, когда нужно обрабатывать запросы от небольшого количества клиентов и каждый из этих запросов может быть обработан очень быстро. Хороший пример сервера с последовательной обработкой — сервер Ping.
Ограничения, присущие модели последовательной обработки, сделали исключительно популярной модель параллельных вычислений, в которой для обработки каждого клиентского запроса создается отдельный поток. Ее преимущество в том, что поток, ожидающий входящие запросы, очень мало загружен — большую часть времени он ожидает. При поступлении клиентского запроса поток пробуждается, создает новый поток для обработки поступившего запроса, а затем ожидает следующий клиентский запрос. Таким образом, клиентский запрос адекватно обрабатывается. Кроме того, поскольку каждый клиентский запрос получает собственный поток, серверное приложение хорошо масштабируется и может задействовать преимущества многопроцессорных машин. Так, если используется модель параллельной обработки и вы улучшаете конфигурацию аппаратуры, добавляя еще один процессор, производительность серверного приложения возрастет.
Служебные приложения на основе параллельной модели были разработаны с использованием Windows. Разработчики Windows заметили, что производительность приложений не столь велика, как хотелось бы. В частности, одновременная обработка клиентских запросов требовала параллельного выполнения множества потоков в ОС. Так как все эти потоки постоянно работали (не приостанавливались для ожидания событий), разработчики поняли, что ядро Windows тратит слишком много времени на переключение контекстов работающих потоков, а самим потокам надо не так уж много процессорного времени. Чтобы Windows стала прогрессивной серверной средой, в Microsoft должны были решить эту проблему. В результате появился новый объект ядра — порт завершения ввода-вывода.