Временной интервал, выданный потоку, ожидающему ввода-вывода, "потрачен впустую"? - PullRequest
0 голосов
/ 05 марта 2011

В настоящее время я анализирую плюсы и минусы написания сервера с использованием многопоточной модели или модели, управляемой событиями.Я уже знаю много минусов многопоточной модели (плохо масштабируется из-за накладных расходов при переключении контекста, ограничений виртуальной памяти и т. Д.), Но я наткнулся на еще один в своем анализе и хотел бы убедиться в правильности моего понимания потоков.

Если у меня 5 потоков, 1 из которых выполняет работу (не блокируется), 4 из которых блокируются в ожидании ввода-вывода (например, ожидая данных из сокета), не время процессораэти 4 потока, по сути, потрачены впустую, так как на самом деле работа не выполняется (при условии, что данные не поступают)?Временной интервал, данный этим 4 заблокированным потокам, отнимает время у 1 потока, фактически выполняющего работу, верно?

В этом случае я прямо говорю, что сокет является блокирующим.

Ответы [ 2 ]

2 голосов
/ 05 марта 2011

Нет.Хотя на самом деле это зависит от типа ОС, типа ввода-вывода (опрашиваемого / DMA) и архитектуры драйвера устройства, большинство операций ввода-вывода устройства выполняется с использованием прерываний DMA +.В таких случаях поток переводится в состояние сна до тех пор, пока не будет запущено прерывание для таких операций ввода-вывода, и планировщик не посещает эти потоки, пока их ожидающий ввод-вывод не будет завершен.Только опрос ввода-вывода может вызвать потребление ресурсов процессора, например режим PIO для жестких дисков.

0 голосов
/ 05 марта 2011

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

Очевидно, что эти детали различаются от платформы к платформе, к среде, к и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...