Taller de certificacin Internacional Tema Hilos Threading Crear

  • Slides: 35
Download presentation
Taller de certificación Internacional Tema: Hilos

Taller de certificación Internacional Tema: Hilos

Threading • Crear Threads • Compartiendo datos • Programación asíncrona

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

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

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

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.

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

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

Ejemplo de thread múltiple

Ejemplo de thread múltiple

Thread. Join

Thread. Join

Thread. Abort • Se debe colocar Thread. Begin. Critical. Region y Thread. End. Critical.

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

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

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

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

Ejemplo ejecución de contexto

Threading • Crear Threads • Compartiendo datos • Programación asíncrona

Threading • Crear Threads • Compartiendo datos • Programación asíncrona

Compartiendo datos • La parte más dificil de trabajar con hilos está en compartir

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

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 • ¿Qué resultado arroja el siguiente código?

Evitando colisiones • Resultado:

Evitando colisiones • Resultado:

Evitando colisiones • Si está trabajando con un único procesador sin soporte Hyper. Threading,

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

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

Evitando colisiones

Evitando colisiones

Cerraduras de sincronización • Synchronization Locks: Del ejemplo anterior se comparte la instancia de

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 1 2 3

Cerraduras de sincronización De 6 ejecuciones solo 1 arrojo Un resultado correcto.

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

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 1 2 3

Cerraduras de sincronización

Cerraduras de sincronización

Clase Monitor • A pesar de que el uso de las 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

Clase Monitor 1 2 3

Interbloqueos • A pesar de bloqueos de sincronización resolverán muchos problemas de sincronización de

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

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

Threading • Crear Threads • Compartiendo datos • Programación asíncrona