Tenemos una aplicación .NET que hace varias llamadas concurrentes a varios servicios web, recopila sus respuestas y luego hace algunos cálculos de esas respuestas. Al tratar de obtener un rendimiento adicional, he estado investigando el uso de enfoques que hacen uso del enhebrado IO de .NET mediante el uso de puertos de terminación IO. He leído varios recursos, incluido el reciente libro de Joe Duffy, Programación concurrente en Windows, y mientras "obtengo" su utilidad, no estoy muy claro en cuanto a su comportamiento dentro de .NET y estoy buscando una explicación concisa.¿Cómo utiliza .NET los subprocesos IO o los puertos de terminación IO?
Respuesta
Lo más probable es que no tenga que hacer nada si ya está usando los métodos asíncronos. Dependiendo de la tecnología que esté utilizando para la llamada al servicio web, en última instancia, se desplegará en la API de Win32 para realizar la llamada a fin de obtener bytes de la red, y con ese fin, utilizará la finalización de E/S Puertos para manejar llamadas asincrónicas.
La premisa básica detrás de los puertos de finalización de E/S es que cuando la espera en las operaciones de E/S, hay un grupo de subprocesos que se mantiene a la espera de que las operaciones de E/S completa (suponiendo que se registró para usar E/finalización O puertos). Cuando finaliza su operación registrada, el hilo del grupo de subprocesos de puerto de finalización de E/S se utiliza para gestionar la devolución de llamada.
Por supuesto, después de llamar al puerto de finalización de E/S, su hilo puede continuar para hacer más trabajo, o finalizar, la elección depende de usted.
Lo que sigue debe ayudar a describir más:
de E/S de terminación Puertos:
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
Dentro de E/S puertos de finalización (Wayback Machine):
El tema sobre un grupo compartido que hace el trabajo mientras el IO está desactivado en IO land era exactamente lo que estaba esperando. Gracias por la explicación. –
- 1. Archivo asíncrono IO en .Net
- 2. ¿Cómo puedo ajustar la visualización de los puertos IO en un bloque de subsistema en Simulink?
- 3. confusión de la clave del puerto de terminación IO
- 4. Consola avanzada IO en .NET
- 5. Haskell mónada: IO [doble] a [IO Doble]
- 6. Entender los contadores en/proc/[pid]/io
- 7. IO asincrónico en Java?
- 8. sin bloqueo-io vs bloqueo-io el rendimiento de los datos en bruto
- 9. Cómo aplanar IO [[String]]?
- 10. ¿Cómo se reemplazan los operadores existentes sin invocarlos en Io?
- 11. ¿Hay alguna aplicación escrita en el lenguaje de programación Io? (O, distribuyendo aplicaciones Io.)
- 12. diferencia entre IO-APIC-fasteoi y IO-APIC-edge
- 13. ¿Cómo crear código comprobable usando clases de IO de .Net?
- 14. recursiva IO en Haskell
- 15. ¿cuál es la diferencia entre la memoria asignada io y io io mapeado
- 16. Haskell IO Testing
- 17. Buffered versus unbuffered IO
- 18. Optimizar archivo C# IO
- 19. ¿Alguien tiene puntos de referencia de componentes .NET Excel IO?
- 20. Haskell Extensible IO Exceptions?
- 21. Bloqueo de IO en Akka
- 22. Memoized IO function?
- 23. Enviando mensajes a todos los navegadores con socket io
- 24. idiomático IO con Scala
- 25. Ruby file IO delimitadores?
- 26. ¿Cuál es la diferencia entre las dependencias de maven org.apache.commons: commons-io y commons-io: commons-io?
- 27. Observable Red IO Parsing
- 28. EUnit y io: formato
- 29. El estado de Linux async IO?
- 30. Mapeo sobre IO en Haskell
Puede ser de interés: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –