viernes, 29 de agosto de 2008

Es la guerra: IO vs "non blocking NIO"


En esta entrada anterior hice una pequeña y somera referencia hacia que los procesadores multicore y el uso de NPTL y otras librerías de threads optimizadas, pueden haber cambiado las reglas del juego. Y no estar tan claro que la E/S no bloqueante merezca la pena frente a una IO bloqueante "de toda la vida".

Parece que a lo largo de 2008 se ha armado un pequeño revuelo / revolución a este respecto. Como muestra estos dos botones: En definitiva, mi conclusión personal es la siguiente para máquinas de 8-32 cores:
  1. Servidores con poca concurrencia esperada: IO síncrona
  2. Servidores con concurrencia media esperada: IO síncrona
  3. Servidores con concurrencia alta esperada: depende, habría que probarlo
  4. Servidores con concurrencia brutal esperada: NIO asíncrona

En los escenarios 1 y 2, seguramente el problema de rendimiento y escalabilidad lo tengamos en otro sitio así que este no es un tema tan crítico en esos casos.

En cualquier caso, depende del uso y de lo que entendamos por poca o mucha concurrencia. El otro día un colega al que respeto un montón me comentaba que lo estamos viendo con un punto de vista exclusivamente de "contenidos de hipertexto"; en un entorno de servir contenidos multimedia el tiempo de cambio de contexto entre threads es inasumible de ninguna de las maneras.

No hay comentarios: