Тратит ли процессор время на поток Java, заблокированный для чтения / записи ввода-вывода? - PullRequest
0 голосов
/ 29 мая 2018

Если поток блокируется во время записи данных в ввод-вывод, нужно ли ЦП предоставлять этот поток в любое время до завершения операции ввода-вывода?

Если да, то почему отказывается от ЦП?

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

PS: у меня естьПрочитайте приличное количество вопросов SO по этой теме, и я не смог найти ответ, касающийся этого конкретного аспекта

1 Ответ

0 голосов
/ 29 мая 2018

Если поток блокируется во время записи данных в IO, нужно ли ЦП предоставлять этот поток в любое время до завершения этой операции ввода-вывода?

Нет, операционная система простоудалите поток, ожидающий повторного запуска, и возобновите его.

Если нет, есть ли что-то кроме «стек на поток», который заставляет «запрос на поток» не выполнять так же хорошо, как «не блокирует»IO с общими потоками "под большой нагрузкой"

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

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

И да, память, используемая тысячами потоков, может занимать значительное количество памяти, что замедляет работу всей системы.

Теперь HTTP-сервер не может работать хорошо только с потоками и блокированием ввода-вывода, но поскольку сегодня так просто использовать асинхронные операции (с использованием futures, async / await, callbacks), мы простопредпочитайте асинхронный ввод-вывод для серверов, которым действительно нужна скорость.

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