Taller de certificacin Internacional Tema Hilos Threading Crear



































- Slides: 35
Taller de certificación Internacional Tema: Hilos
Threading • Crear Threads • Compartiendo datos • Programación asíncrona
Threading • El concepto básico detrás threading es realizar varias operaciones simultáneamente. Cada una de estas operaciones puede ser considerado como un subproceso independiente de la lógica
Creando hilos • Se encuentra en el namespace System. Threading de. Net framework y tiene los tipos necesarios para crear y administrar hilos.
Métodos y propiedades más importantes Is. Alive Indica si es hilo está ejecutándose actualmente Is. Background Indica si el hilo está ejecutándose como background Is. Thread. Pool. Th read Indica si el hilo se encuentra en el pool de hilos Manage. Thread. I d Obtiene un identificador del hilo actual Name nombre asociado al hilo Priority Prioridad del hilo Thread. State Obtiene el estado del hilo Abort Levanta un Thread. Abort. Exception para indicar que el hilo debe de ser abortado Interrupt Levanta un Thread. Interrupted. Exception cuando un hilo está en estado bloqueado. Join Bloquea el actual hilo, hasta que el hilo termine.
Propiedades estáticas Current. Context Obtiene el actual Thread. Context relacionado al hilo actual Current. Principal Obtiene el usuario asociado al hilo actual Current. Thread Obtiene el hilo que se ejecuta actualmente Abort Puede dejar un App. Domain con un estado no estable Get. Domain Obtiene el App. Domain asociado con el hilo Get. Domain. Id Obtiene un identificador para el App. Domain asociado con el hilo Reset. Abort Cancela un pedido de Abort Sleep Bloquea un hilo por cierto tiempo (en milisegundos) Begin. Critical. Regi Indica el inicio de una región crítica on End. Critical. Regio n Indica el fin una región crítica, donde si ocurre un Abort, puede dejar un App. Domain con un estado no estable
Pasos para crear un hilo 1 • Crear un método que no devuelva valor (void) 2 • crear un delegado Thread. Start y especificar el método creado en el paso 1. 3 • Crear un objeto Thread y especificar el objeto Thread. Start creado en el paso 2 4 • Llamar a Thread. Start para empezar la ejecución del nuevo hilo
Ejemplo de thread
Ejemplo de thread múltiple
Thread. Join
Thread. Abort • Se debe colocar Thread. Begin. Critical. Region y Thread. End. Critical. Region esto le indica al sistema de hilos que se puede abortar el hilo, pero NO en esa zona. El código dentro de esta región, será ejecutado como si fuese un solo hilo.
Thread. Abort Threa d start Thread abort Do work More work Even more work Done Aborte d
Thread. Abort Critical region Threa d start Do work More work Thread abort Even more work Done Aborte d
Ejecución de contexto • Cada hilo tiene su informacion asociada y ésta es usualmente propagada a nuevos hilos (información de seguridad, localización, de transacción (System. Transactions). • La clase Execution. Context brinda métodos estáticos para controlar el flujo del contexto de la información. • Se puede suprimir el contexto con Execution. Context. Suppress. Flow, esto incrementa la performance, pero se pierde seguridad, cultura e
Ejemplo ejecución de contexto
Threading • Crear Threads • Compartiendo datos • Programación asíncrona
Compartiendo datos • La parte más dificil de trabajar con hilos está en compartir datos entre multiples hilos. Una vez que comience a trabajar con múltiples subprocesos en una aplicación, usted se convierte en responsable de la protección de los datos compartidos que se puede acceder desde múltiples hilos.
Evitando colisiones • Antes de que los threads estuvieran disponibles, se podría esperar que cualquier acceso de los datos se está realizando un objeto a la vez. Ahora que hemos entrado en el mundo multiproceso, tenemos que lidiar con el hecho de que varios subprocesos pueden interrogar a nuestros objetos de forma simultánea. Esto causa problemas en algunas formas engañosas.
Evitando colisiones • ¿Qué resultado arroja el siguiente código?
Evitando colisiones • Resultado:
Evitando colisiones • Si está trabajando con un único procesador sin soporte Hyper. Threading, este código probablemente siempre funcione como se espera. Sin embargo, si ejecuta el código varias veces en un equipo con varios procesadores o Hyper-Threaded, verá que a veces el número resultante es inferior a los 100. 000. ¿Por qué? Esto sucede debido a la forma en que la actualización del campo recuento
Evitando colisiones ¿Cómo resolver el problema? • Usando la clase Interlocked. Estos son algunos de sus métodos. Add Suma 2 enteros en una operación atómica Decrement Resta 2 valores en una operación atómica Exchange Intercambia 2 valores, de forma atómica Increment Adhiere uno a un valor de forma atómica Read Lee un número de forma atómica (64 bits)
Evitando colisiones
Evitando colisiones
Cerraduras de sincronización • Synchronization Locks: Del ejemplo anterior se comparte la instancia de la clase Counter, a pesar de haber añadido Interlocked , en algunas ocasiones el conteo puede quedar mal. Esto se debe a que se puede actualizar los recuentos simples correctamente, pero si añadimos una condición para contar los pares se puede perder el conteo.
Cerraduras de sincronización 1 2 3
Cerraduras de sincronización De 6 ejecuciones solo 1 arrojo Un resultado correcto.
Cerraduras de sincronización • Para resolver este problema se usa los bloqueos o cerraduras de sincronización. C # , debe utilizar la palabra clave lock , y en Visual Basic es la palabra clave Sync. Lock. • Al reemplazar el código de la clase Interlocked con un bloqueo de sincronización, podemos asegurar que sólo un hilo a la vez puede entrar en la sección bloqueada del código.
Cerraduras de sincronización 1 2 3
Cerraduras de sincronización
Clase Monitor • A pesar de que el uso de las cerraduras de sincronización son a menudo las maneras más fáciles para crear bloqueos, puede que tenga que tener más control sobre la forma en que están creando un bloqueo. Debajo de las cubiertas, los bloqueos de sincronización se acaba utilizando la clase Monitor para llevar a cabo la sincronización.
Clase Monitor 1 2 3
Interbloqueos • A pesar de bloqueos de sincronización resolverán muchos problemas de sincronización de subprocesos, puede introducir un problema conocido como callejones sin salida, pero estas son cuestiones de desarro. llo y detección cuidadosa
Otros métodos de sincronización • Aparte de la clase monitor, existen otros mecanismos de sincronización con sus propios usos: • Clase Reader. Writer. Lock • Sincronización con los objetos Kernel de Windows – Clase Mutex – Clase Semaphore – Clase Auto. Reset. Event – Clase Manual. Reset. Event
Threading • Crear Threads • Compartiendo datos • Programación asíncrona