puertos de finalización de E/S son impresionantes. No hay mejor palabra para describirlos. Si algo en Windows se hizo bien, son puertos de finalización.
Se puede crear un número de hilos (no importa cuántos) y hacer que todo el bloque en un puerto de finalización hasta que un evento (ya sea uno que publique de forma manual, o un evento de
a timer o
E/S asíncrona , o lo que sea) llega. 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 subprocesos activos que el límite máximo, esperará hasta que uno de ellos finalice y luego pasará el evento al subproceso 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 y una solución de "llenar la CPU tanto como sea posible".
Usted puede lanzar el archivo de lectura y escritura en un puerto de finalización, tomas de corriente, o cualquier otra cosa que es temporizador de espera. 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.
Para aquellos que todavía está interesado: [multiproceso E/S asíncrona y puertos E/LA - Dr. Dubb de] (http://www.drdobbs.com/cpp/multithreaded-asynchronous-io-io-comple/201202921) –