2009-02-12 11 views
29

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?

+1

Puede ser de interés: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –

Respuesta

25

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):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml

+0

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. –