2010-10-26 22 views
41

He estado leyendo sobre el modelo de programación roscado frente al modelo asíncrono de este artículo realmente bueno. http://krondo.com/blog/?p=1209Hilos frente a Async

Sin embargo, el artículo menciona los siguientes puntos.

  1. Un programa asincrónico simplemente superará a un programa de sincronización al cambiar de una tarea a otra siempre que haya una E/S.
  2. Los subprocesos son administrados por el sistema operativo.

Recuerdo haber leído que los hilos son gestionados por el sistema operativo moviéndose alrededor de los TCB entre Ready-Queue y Waiting-Queue (entre otras colas). En este caso, los hilos no pierden tiempo en esperar, ¿verdad?

En vista de lo mencionado anteriormente, ¿cuáles son las ventajas de los programas asíncronos sobre los programas con subprocesos?

+0

Creo que te refieres a síncrono vs asincrónico. – someguy

+4

No, quise decir Threaded vs. Async. Mencioné el primer punto solo porque fue algo que entendí del artículo. –

Respuesta

55
  1. Es muy difícil escribir código que sea seguro para subprocesos. Con un código asíncrono, sabes exactamente dónde cambiará el código de una tarea a la siguiente y, por lo tanto, las condiciones de carrera son mucho más difíciles de conseguir.
  2. Los subprocesos consumen una buena cantidad de datos ya que cada subproceso necesita tener su propia pila. Con el código asíncrono, todo el código comparte la misma pila y la pila se mantiene pequeña debido al despliegue continuo de la pila entre las tareas.
  3. Los subprocesos son estructuras de sistema operativo y, por lo tanto, son más memoria para que admita la plataforma. No hay tal problema con las tareas asincrónicas.
+9

Para elaborar un poco: 1. La parte de E/S del código enhebrado es relativamente fácil, pero administrar el estado compartido entre hilos (usando bloqueos/colas/etc.) sin condiciones de carrera es lo que lo hace complicado. Usar un modelo asíncrono significa que tienes menos actividad al mismo tiempo, por lo que las carreras se evitan fácilmente. 2/3. cada subproceso consumirá al menos una página de memoria de la pila (4 KB o 8 KB normalmente), además de una cantidad desconocida de memoria para otras estructuras de datos relacionadas con el estado de esa secuencia. –

4

En primer lugar, tenga en cuenta que gran parte del detalle de cómo se implementan y programan los hilos son muy específicos del sistema operativo. En general, no debería preocuparse por los hilos que se esperan entre sí, ya que el sistema operativo y el hardware intentarán organizarlos para que se ejecuten de manera eficiente, ya sea de forma asincrónica en un sistema de procesador único o en paralelo en multiprocesadores.

Una vez que un hilo ha terminado de esperar algo, digamos E/S, se puede considerar como ejecutable. Los hilos que son ejecutables se programarán para su ejecución en algún momento cercano. Si esto se implementa como una cola simple o algo más sofisticado, de nuevo, es específico para el sistema operativo y el hardware. Puede pensar en el conjunto de hilos bloqueados como un conjunto y no como una cola estrictamente ordenada.

Tenga en cuenta que en un sistema de procesador único, los programas asíncronos como se definen aquí son equivalentes a los programas de subprocesos.

-1

Async I/O significa que ya hay un hilo en el controlador que hace el trabajo, por lo que está duplicando la funcionalidad y incurriendo en algunos gastos generales. Por otro lado, a menudo no está documentado cómo se comporta exactamente el subproceso del controlador, y en escenarios complejos, cuando se desea controlar el comportamiento de tiempo de espera/cancelación/inicio/detención, sincronización con otros subprocesos, tiene sentido implementar su propio subproceso. También es a veces más fácil razonar en términos de sincronización.

+3

Así no es como funciona la E/S asíncrona. Fundamentalmente, la E/S es impulsada por eventos (usted inicia una E/S en un dispositivo, más tarde, el dispositivo la completa y, con suerte, se lo indica con una interrupción). Hay algunos tipos de E/S (como E/S de disco) en los que el controlador usa una secuencia de kernel por un motivo algo oscuro; pero para las redes, son las operaciones de sincronización todo el camino hacia abajo. – Glyph

0

ver http://en.wikipedia.org/wiki/Thread_(computing)#I.2FO_and_scheduling

Sin embargo, el uso de sistema de bloqueo de llamadas en subprocesos de usuario (en oposición al núcleo hilos) o fibras pueden ser problemáticos. Si un subproceso de usuario o una fibra realiza una llamada al sistema que bloquea, los otros subprocesos y fibras del usuario en el proceso no se pueden ejecutar hasta que vuelva la llamada del sistema. Un ejemplo típico de este problema es cuando se realiza E/S: la mayoría de los programas se escriben para realizar E/S sincrónicamente.Cuando se inicia una operación de E/S, se realiza una llamada al sistema y no regresa hasta que se haya completado la operación de E/S. En el período intermedio, todo el proceso está "bloqueado" por el kernel y no puede ejecutarse, lo que priva de la ejecución a otros hilos y fibras del usuario en el mismo proceso.

De acuerdo con esto, es posible que se bloquee todo el proceso, y no se programará ningún subproceso cuando se bloquea un subproceso en IO. Creo que esto es específico del os, y no siempre se mantendrá.

6

Hay dos formas de crear hilos de rosca:

sincrónica - el padre crea una (o más) procesos hijo y luego debe esperar a que cada niño termine. El subproceso sincrónico a menudo se denomina fork-join model.

subprocesamiento asincrónico - el primario y el secundario se ejecutan simultáneamente/independientemente el uno del otro. Los servidores multiproceso generalmente siguen este modelo.

recursos - http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720

-1
  1. Supongamos que tiene 2 tareas, que no esté relacionado con cualquier IO (en la máquina multiprocesador). En este caso, los subprocesos superan a Async. Debido a que Async como un programa de un solo hilo ejecuta sus tareas en orden. Pero los hilos pueden ejecutar ambas tareas simultáneamente.

  2. Supongamos que tiene 2 tareas, que implican IO (en la máquina multiprocesador). En este caso, tanto Async como Threads realizan más o menos lo mismo (el rendimiento puede variar en función del número de núcleos, la programación, la cantidad de tareas que requiere mucho esfuerzo , etc.). También Async requiere menos cantidad de recursos, poca sobrecarga y es menos complejo para programar en un programa de múltiples hilos.

Cómo funciona? El subproceso 1 ejecuta la tarea 1, ya que está esperando IO, se mueve a IO esperando cola. De forma similar, el subproceso 2 ejecuta la tarea 2, dado que también involucra IO, se mueve a IO waiting Queue. Tan pronto como se resuelva la solicitud de IO , se mueve a la cola lista para que el planificador pueda programar la ejecución del proceso .

Async ejecuta la Tarea 1 y sin esperar a que IO lo complete continúa con la Tarea 2 y espera a que se complete la EO de ambas tareas. Es completa las tareas en el orden de finalización de IO.

Async más adecuado para las tareas que involucran llamadas de servicios web, consulta de base de datos llamadas etc., Hilos para tareas intensivas de proceso.

El siguiente video explica sobre Async vs Threaded model y también cuándo utilizar, etc., https://www.youtube.com/watch?v=kdzL3r-yJZY

la esperanza que esto sea útil.

+0

https://www.youtube.com/watch?v=kdzL3r-yJZY – Lakshmipathi

+0

Un enlace a una posible solución siempre es bienvenido, pero por favor [agregue contexto alrededor del enlace] (// meta.stackoverflow.com/a/8259) para que los demás usuarios tengan una idea de qué es y por qué está allí. ** Siempre cite la parte más relevante de un enlace importante, en caso de que el sitio objetivo no esté disponible o permanezca desconectado de forma permanente. ** Tenga en cuenta que ser apenas más que un enlace a un sitio externo es una posible razón para [por qué ¿Cómo se eliminan algunas respuestas?] (// stackoverflow.com/help/deleted-answers). – Machavity

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/17067843) – gobrewers14

Cuestiones relacionadas