java io blocking nonblocking

java - ¿Por qué "E/S multiplexadas, no bloqueantes,[..] mucho más escalables que las orientadas a hilos, bloqueando E/S"?



io blocking (2)

Estoy leyendo sobre Canales en los documentos JDK 7 ( aquí ), y tropecé con esto:

E / S multiplexada, no bloqueante, que es mucho más escalable que orientado a hilos, bloqueando E / S, [...]

¿Hay una explicación simple de por qué esto es así?


"Bloquear" significa que los hilos tienen que esperar el tiempo necesario para que un recurso esté disponible ... lo que significa, por definición, que los hilos estarán esperando por los recursos. El no bloqueo evita este tipo de cosas.

En general, las soluciones sin bloqueo son más complicadas, pero evitan la contención de recursos, lo que hace que sea mucho más fácil escalar. (Dicho esto, el objetivo de Channel es hacer esto menos complicado).


Porque una pila de subprocesos suele ser mucho más grande que la estructura de datos necesaria para admitir una conexión de E / S asincrónica. Además, programar miles de subprocesos es ineficiente.