c# - usa - que se puede realizar en visual basic
¿Las palabras clave async y esperar no hacen que se creen hilos adicionales? (1)
No corren en paralelo, se turnan. Cuando se bloquea el progreso de la Tarea en ejecución, almacena su estado y proporciona el control a una Tarea lista. Es una multitarea cooperativa, no un verdadero paralelismo.
Los hilos funcionan según el principio de la muestra. Sin embargo, hay varias diferencias clave que me gustaría destacar.
Primero, simplemente porque async
/ await
no son hilos de sistema operativo:
- Las tareas no verán diferentes ID de hilo
- El almacenamiento local de subprocesos no se conmuta automáticamente al contexto cuando se produce una Tarea.
En segundo lugar, las diferencias de comportamiento:
-
async
/await
usa la multitarea cooperativa, los hilos de Win32 usan la prioridad. Por lo tanto, es necesario que todas las operaciones de bloqueo controlen explícitamente el uso del modeloasync
/await
. Por lo tanto, puede terminar bloqueando un subproceso completo y todas sus tareas realizando una llamada de bloqueo a una función que no está escrita para rendir. - Las tareas no se ejecutarán en paralelo en un sistema de multiprocesamiento. Dado que la reinserción está controlada, esto hace que el mantenimiento de las estructuras de datos sea mucho más fácil.
Como Stephen señala en un comentario, puede obtener ejecución simultánea en varios subprocesos del sistema operativo (junto con toda la complejidad y las posibles condiciones de carrera) si utiliza un contexto de sincronización de multiproceso. Pero las citas de MSDN fueron sobre el caso de contexto de un solo hilo.
Finalmente, en otros lugares donde se usa este mismo paradigma de diseño, puede aprender mucho sobre buenas prácticas para async
/ await
al estudiar estos:
- Fibras Win32 (usa el mismo estilo de llamada que los hilos, pero cooperativo)
- Win32 operaciones de E / S superpuestas , Linux aio
- Coroutines
Estoy confundido. ¿Cómo se puede ejecutar una o varias Task
en paralelo en un solo hilo? Mi comprensión del paralelismo es obviamente errónea.
Bits de MSDN no puedo envolver mi cabeza alrededor:
Las palabras clave async y espera no hacen que se creen subprocesos adicionales. Los métodos asíncronos no requieren subprocesos múltiples porque un método asíncrono no se ejecuta en su propio hilo. El método se ejecuta en el contexto de sincronización actual y usa el tiempo en el hilo solo cuando el método está activo.
.. y:
Entre iniciar una tarea y esperarla, puede iniciar otras tareas. Las tareas adicionales se ejecutan implícitamente en paralelo, pero no se crean subprocesos adicionales.