Pregunta

Una de las características de la programación asincrónica .NET es el ahorro en las discusiones durante la larga ejecución de la operación. La clase FileStream puede ser configurado para permitir que las operaciones asíncronas, que permite ejecutar (por ejemplo) una operación de copia sin prácticamente utilizar ningún hilos. Para mi sorpresa, descubrí que la ejecución de la copia flujo asíncrono realiza no sólo más lento, pero también utiliza más potencia de procesamiento que síncrona copia corriente equivalente.

¿Hay alguna se realizaron pruebas de referencia para comparar una sincrónica vs ejecución asíncrona de instrucciones (archivo, red, etc.)? ¿Realmente tiene sentido para llevar a cabo una operación asincrónica en lugar de atravesar hilo separado y realizar funcionamiento síncrono en el entorno de servidor si la operación asincrónica es veces más lenta que la sincrónica?

¿Fue útil?

Solución

En realidad, las condiciones bajo las cuales el archivo de E / S será realmente asíncrona son bastante específicos, incluso a nivel de Win32 nativo. Ver este artículo para más detalles.

Otros consejos

Citando el artículo que incluyó en su comentario a la respuesta de Alex @.

  

En situaciones en las que una solicitud de E / S es   espera que tenga una gran cantidad de   tiempo, como una actualización o copia de seguridad de un   gran base de datos o una lenta   enlace de comunicaciones, E / S asíncrona   Es generalmente una buena manera de optimizar   eficiencia de procesamiento. Sin embargo, para   relativamente rápido I / operaciones O, The   sobrecarga de núcleo de procesamiento de I / O   solicitudes y las señales del kernel pueden hacer   E / S asíncrona menos beneficiosa,   especialmente si muchos Ayuno de E / S   operaciones deben hacerse. En esto   caso, E / S síncrona sería mejor.   Los mecanismos y aplicación   detalles de cómo llevar a cabo estos   tareas varían dependiendo del tipo de   identificador de dispositivo que se utiliza y la   necesidades particulares de la aplicación.   En otras palabras, no son por lo general   múltiples maneras de resolver el problema.

Fwiw, creo @Alex es correcto que hay otro hilo que ejecuta el código del núcleo asociado con su solicitud de E / S. Ese hilo no está administrado por su aplicación, sin embargo. El hilo conductor del código del núcleo puede propio bloque en una solicitud dispositivo de E / S y esperar a que el hardware real para completar la solicitud antes de señalar el subproceso en modo de usuario, pero todavía está allí, no obstante.

El uso de las discusiones asincrónicas no debe ser pensado como una manera de aumentar la velocidad de cualquier solicitud en particular, sino más bien una manera de aumentar la eficiencia general permitiendo su aplicación para continuar el procesamiento en otras tareas mientras se espera que relativamente lento de E / S .

¿Está seguro de que su punto de referencia operación de copia correctamente? Cualquier operación asíncrona basta con crear nuevo hilo y se ejecuta la operación en el nuevo hilo, dejando hilo principal para hacer otras cosas.

Las operaciones asincrónicas en su mayoría dan un unos simplificaciones (menos líneas de código) sobre la creación de la rosca a sí mismo pero no deben afectar al rendimiento más que la creación de un nuevo hilo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top