Uno de los propósitos principales de escribir código en el modelo de programación asíncrona (más específicamente - usar devoluciones de llamada en lugar de bloquear el hilo) es minimizar el número de hilos de bloqueo en el sistema.Qué recursos capturan los hilos bloqueados
Para ejecutar subprocesos, este objetivo es obvio, debido a los cambios de contexto y los costos de sincronización.
Pero, ¿qué pasa con los hilos bloqueados? ¿Por qué es tan importante reducir su número?
Por ejemplo, cuando se espera una respuesta de un servidor web, un hilo se bloquea y no ocupa tiempo de CPU y no participa en ningún cambio de contexto.
Así que mi pregunta es: que no sea RAM (¿aproximadamente 1 MB por hilo?) ¿Qué otros recursos ocupan los hilos bloqueados?
Y en qué casos este costo realmente justifica la molestia de escribir código asíncrono (el precio podría ser, por y las variables locales para ser campos de clase).
actualización - adicional razones por las que no se mencione o no dio el peso suficiente para:
más hilos de bloqueo significa más sobre los recursos comunales
más hilos significa más creación y eliminación de hilos que es costoso
El sistema definitivamente puede quedarse sin rosca/RAM y luego dejar de atender a los clientes (en un escenario de servidor web, esto puede de hecho llevar el servicio)
Disculpa: la respuesta puede depender del contexto. Por ejemplo, los hilos de trabajo de IIS son un producto limitado, mientras que los hilos de sistema operativo son menos. El detalle sería útil. –
Nunca escuché que minimizar el número de subprocesos existentes sea un propósito del código asincrónico. El código asíncrono, por definición, depende de tener más hilos que el código síncrono (¡un solo hilo!). –
@Harper: [En desacuerdo] (http://blogs.msdn.com/b/ericlippert/archive/2010/11/04/asynchrony-inc-c-5-0-part-four-it-s-not -magic.aspx) –