Я пытаюсь понять, как операционные системы обрабатывают контекстное переключение в разных моделях, чтобы лучше понять, почему производительность NIO лучше в случае больших пиков в количестве запросов. Помимо того, что число потоков может быть ограничено, мне любопытно, как блокирующие операции, выполняемые в таком большом количестве запросов, могут повлиять на использование ресурсов.Контекстные коммутаторы для спальных/ожидающих потоков
В одном запросе на модель потока, скажем, веб-приложение на основе сервлета 2.5, если 499 потоков ждут ввода-вывода базы данных, и только один поток нуждается в работе, переключается ли контекст ОС между всеми этими 500 потоками, пытаясь найти тот, который нуждается в работе? Для выполнения контекстного переключателя операционная система должна сохранять состояние текущего потока и восстанавливать состояние следующего потока. После этого ОС обнаружит, что ему не требуется никакого времени процессора, и будет поддерживать контекстное переключение до тех пор, пока не найдет поток, который нуждается в работе. Также, как это выглядит с точки зрения использования сервера? Является ли процессор низким, поскольку он в основном просто связан с затратами на обмен информацией об обмене контекстами внутри и снаружи, а не фактически что-то вычисляет?
Заранее благодарим за любую помощь. Если вы можете указать мне в сторону книг, учебников и т. Д., Я бы тоже это оценил.
Выполнение ЦП на ядре является одним из тех ресурсов, которыми управляет ОС. Ядро состояния ядра ОС уже знает, какие потоки требуют этого ресурса, а те, которые этого не делают.Если поток запрашивает ввод-вывод, и запрос не может быть удовлетворен немедленно, ОС знает, что потоку не нужен ресурс ЦП до тех пор, пока запрос ввода-вывода не будет удовлетворен, поэтому он не даст нить никакого выполнения до тех пор, пока он не будет , Ответ Джереми более подробно. –