Usando un delegado puedo llamar a cualquier función de forma asincrónica. Según la documentación, entiendo que esto se hace poniendo en cola un elemento de trabajo para el grupo de subprocesos.diferencia entre las llamadas asíncronas y las llamadas asíncronas en io .net
Uno también puede hacer llamadas asíncronas a las funciones IO (como la lectura de sockets, archivos, páginas web, etc.). Creo (pero no estoy seguro) que esto NO genere un elemento de trabajo en el threadpool. Solo después de que se obtiene el resultado (o un error), se llama a la devolución de llamada desde un nuevo hilo en el grupo de hilos.
es correcta esta suposición? ¿O es una llamada IO asíncrona, también debajo de las cubiertas solo un hilo que se genera? Y si este es el caso, ¿cómo las llamadas asíncronas pueden ser mejores que las de desove (usando un grupo de subprocesos) y bloquear?
también: cuántas llamadas asíncronas se puede tener siendo tratado en un momento dado? En caso de que se use un threadpool, supongo que todo lo que quieras. Pero en el caso de llamadas asíncronas IO, ¿hay un límite? Y es así, ¿cómo sabes cuál es el límite?
@sergey: por lo que está diciendo en efecto, hay una diferencia. Entonces, ¿cuántas solicitudes de IO pueden estar pendientes en un momento dado? ¿Cuál es el punto dulce? ¿Es esto dependiente del IO dirigido o algo más? ¿Cómo puede uno saber? – Toad
Respuesta simple: depende. Si usa puertos de finalización de IO (esta es la técnica más complicada pero más poderosa), el sistema operativo crearía la menor cantidad de subprocesos posible (depende de la configuración de su hardware) para manejar todas las tareas de IO activas. El uso de alertable IO requiere un hilo para! Cada! operaciones pendientes de IO. Es por eso que los puertos de copio IO son mucho más efectivos y escalables: puede manejar! Muchos! solicitudes simultáneas de IO con recursos mínimos. Creo que debería leer "Windows a través de C/C++" o "Programación de aplicaciones en el servidor" de Jeffrey Richter para comprender todo esto. ¡Es bastante duro! –
@reinier Los límites se basan en todo, desde su número de CPU hasta su clave de licencia de Windows. Pero los límites no son importantes: siempre que utilice los métodos asíncronos que le proporciona el BCL, * usted sabe * obtendrá una mejor escalabilidad que si usted, por ejemplo. 'QueueUserWorkItem'. – bzlm