Если поток блокируется во время записи данных в IO, нужно ли ЦП предоставлять этот поток в любое время до завершения этой операции ввода-вывода?
Нет, операционная система простоудалите поток, ожидающий повторного запуска, и возобновите его.
Если нет, есть ли что-то кроме «стек на поток», который заставляет «запрос на поток» не выполнять так же хорошо, как «не блокирует»IO с общими потоками "под большой нагрузкой"
Отмена ожидающего потока и его возобновление могут быть дешевыми для одного потока, но недешевыми, когда их тысячи.не забывайте, что операционная система должна рассчитать, какой поток возобновить (в соответствии с приоритетом), где возобновить его (в соответствии с доступными процессорами и сродством), а сам процессор, вероятно, должен будет загрузить память, используемую потоком, вкеш строк, который настоящая сука.
Не говоря уже о том, что поток, который переходит в спящий режим, должен сбрасывать свои данные в ОЗУ из строк кэша, и это очень дорогая операция (строки кэша существуют по причине, большой).
И да, память, используемая тысячами потоков, может занимать значительное количество памяти, что замедляет работу всей системы.
Теперь HTTP-сервер не может работать хорошо только с потоками и блокированием ввода-вывода, но поскольку сегодня так просто использовать асинхронные операции (с использованием futures, async / await, callbacks), мы простопредпочитайте асинхронный ввод-вывод для серверов, которым действительно нужна скорость.