windows - files - tag folders
Ventajas y desventajas del puerto de terminación de E/S (4)
¿Por qué mucha gente dice que el puerto de E / S de finalización es rápido y agradable?
¿Cuáles son las ventajas y desventajas del puerto de terminación de E / S?
Quiero saber algunos puntos que hacen IOCP más rápido que otros modelos.
Si puede explicarlo comparando otros modelos (select, epoll, tradicional multi thread / process), sería mejor.
al utilizar IOCP, podemos superar el problema de "un hilo por cliente". Se sabe comúnmente que el rendimiento disminuye mucho si el software no se ejecuta en una verdadera máquina multiprocesador. Los hilos son recursos del sistema que no son ilimitados ni baratos.
IOCP proporciona una forma de tener unos pocos subprocesos (de trabajo de E / S) que manejan la entrada / salida de múltiples clientes "de manera justa". Los hilos están suspendidos y no usan los ciclos de la CPU hasta que haya algo que hacer.
También puede leer información en este bonito libro http://www.amazon.com/Windows-System-Programming-Johnson-Hart/dp/0321256190
Los puertos de terminación de E / S son proporcionados por el O / S como una operación de E / S asincrónica, lo que significa que ocurre en segundo plano (generalmente en hardware). El sistema no desperdicia ningún recurso (por ejemplo, subprocesos) esperando que se complete la E / S. Cuando se completa la E / S, el hardware envía una interrupción al O / S, que luego activa el proceso / subproceso correspondiente para manejar el resultado. INCORRECTO: IOCP NO requiere soporte de hardware (ver comentarios a continuación)
Normalmente, un único subproceso puede esperar en una gran cantidad de terminaciones de E / S, mientras que ocupa muy pocos recursos cuando la E / S no ha regresado.
Otros modelos asíncronos que no están basados en puertos de terminación de E / S generalmente emplean un grupo de subprocesos y los subprocesos esperan a que se complete la E / S, utilizando de ese modo más recursos del sistema.
La otra cara de la moneda es que los puertos de terminación de E / S generalmente requieren soporte de hardware, por lo que generalmente no son aplicables a todos los escenarios asíncronos.
Los puertos de terminación de E / S son increíbles. No hay mejor palabra para describirlos. Si algo en Windows se hizo bien, son puertos de finalización.
Puede crear un número de hilos (en realidad no importa cuántos) y hacer que todos bloqueen en un puerto de finalización hasta que llegue un evento (ya sea uno que publique manualmente o un evento de un temporizador o E / S asincrónica, o lo que sea) . Luego, el puerto de finalización activará un hilo para manejar el evento, hasta el límite que haya especificado. Si no especificaste nada, asumirá "hasta la cantidad de núcleos de CPU", lo que es realmente agradable.
Si ya hay más hilos activos que el límite máximo, esperará hasta que uno de ellos finalice y luego entregará el evento al hilo tan pronto como pase al estado de espera. Además, siempre activará los hilos en un orden LIFO, por lo que es probable que los cachés aún estén calientes.
En otras palabras, los puertos de terminación son una "encuesta para eventos" sin complicaciones, así como una solución de "llenar la CPU tanto como puedas".
Puede lanzar lecturas y escrituras de archivos en un puerto de terminación, zócalos o cualquier otra cosa que sea viable. Y, puede publicar sus propios eventos si lo desea. Cada evento personalizado tiene al menos un entero y un valor de puntero de datos (si usa la estructura predeterminada), pero no está limitado a eso, ya que el sistema aceptará felizmente cualquier otra estructura también.
Además, los puertos de terminación son rápidos, realmente muy rápidos. Érase una vez, necesitaba notificar un hilo de otro. Como sucedió, ese hilo ya tenía un puerto de finalización para E / S de archivo, pero no bombeó mensajes. Por lo tanto, me preguntaba si debería limitar el problema y usar el puerto de finalización para simplificar, aunque publicar un mensaje de texto sería mucho más eficiente. Estaba indeciso, así que hice una evaluación comparativa. Sorpresa, resultó que los puertos de terminación eran aproximadamente 3 veces más rápidos. Entonces ... más rápido y más flexible, la decisión no fue difícil.
Según mi experiencia, la desventaja del puerto de finalización de E / S puede ser la pantalla azul de la muerte con algunos adaptadores serie RS-232 debido a errores en los controladores.