Почему «мультиплексированный неблокирующий ввод / вывод [...] гораздо более масштабируем, чем ориентированный на поток блокирующий ввод / вывод»? - PullRequest
12 голосов
/ 30 января 2012

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

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

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

Ответы [ 2 ]

6 голосов
/ 30 января 2012

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

3 голосов
/ 30 января 2012

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

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

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