Почему "мультиплексированный, неблокирующий I/O, [..] гораздо более масштабируемый, чем поточно-ориентированный, блокирующий ввод-вывод"?

Я читаю о Каналах в документах JDK 7 (здесь) и наткнулся на это:

Мультиплексированный, неблокирующий ввод-вывод, который гораздо более масштабируемый, чем поточно-ориентированный, блокирующий ввод-вывод, [...]

Есть ли простое объяснение, почему это так?

Ответ 1

"Блокировка" означает, что потоки должны ждать столько, сколько необходимо для того, чтобы ресурс стал доступным... что означает, что по определению потоки будут сидеть в ожидании ресурсов. Неблокирование позволяет избежать такого рода вещей.

Как правило, неблокирующие решения сложнее, но они избегают конфликтов ресурсов, что значительно упрощает масштабирование. (Тем не менее, точка Channel заключается в том, чтобы сделать это менее сложным.)

Ответ 2

Поскольку стек потоков обычно намного больше, чем структура данных, необходимая для поддержки асинхронного ввода-вывода. Кроме того, планирование тысяч потоков неэффективно.