SlideShare una empresa de Scribd logo
1 de 44
Integrantes
Luis FelipeZacaríasGuzmán
Alejandro JavierRomero Rosas
Karen Zamora Hernández
Ana IvonneToral Morales
JoséGuillermo PájaroCoatl
DanielAlonso Calvario
Bruno Salgado Mejía
Funcionamiento de hilos
• Todos los hilos se les asigna un tiempo de
ejecución apropiado y que todos aquellos
hilos que estén bloqueados o pausados no
consuman tiempo de CPU.
• En un ordenador con un solo procesador, un
programador de hilos gestiona una
alternancia rápida entre los hilos activos,
derivando en un comportamiento
entrecortado
• La asignación de tiempo para cada hilo está
en el orden de las decenas de milisegundos.
Hilos y procesos
• Todos los hilos dentro de una aplicación
están dentro de un proceso.
• La diferencia principal es que los procesos
están completamente aislados unos de otros
• los hilos comparten memoria con otros hilos
que pertenecen al mismo proceso
• Un hilo puede estar generando datos en un
segundo plano mientras que otro hilo
muestra los datos que van llegando.
Procesos y subprocesos
• Para que un proceso sea capaz de hacer
• algo, el proceso debe ser propietario de un hilo
(thread).
• Este thread es el responsable de ejecutar el
código contenido en el espacio de direcciones del
proceso.
• un proceso puede contener varios threads y todos
ellos ejecutando código “simultáneamente "en el
espacio de direcciones del proceso
• cada thread tiene su propia colección de
registros de la CPU y su propio stack (pila de
almacenamiento)
• threads se ejecutan concurrentemente al
asignar ‘rodajas de tiempo’ (time slices)
llamadas quantums a cada thread
alternativamente (y consecutivamente).
• cada quantum es de 15 milissegundos.
Administración de procesos
• Process es un componente que nos permite
• Iniciar
• detener
• controlar
• supervisar aplicaciones.
Administración de hebras y hilos
• El ámbito System.Threading proporciona en
la plataforma .NET las clases e interfaces
para escribir código multihebra.
• Cada hebra con un proceso
• Si el proceso crea más hebras, será
multihebra(multithreading)
Por que son útiles las hebras
• En primer lugar, cuando hay una tarea de
fondo. Imagine que quiere poner un logotipo
que gire en la parte superior izquierda del
formulario.
• En segundo lugar, cuando esta realizando
más de una tarea a la vez Podría dividir la
imagen en cuatro partes y ejecutar las
cuatro copias en la rutina de procesado de
imagen
La clase Thread
PROPIEDADES
• CurrentPrincipal
• CurrentThread
• IsAlive
• IsBackground
• Name
• Priority
• ThreadState
METODOS
• Abort
• Interrupt
• Join
• Resume
• Sleep
• Start
• Suspend
Control de las hebras
• Llame a su método Start() para comenzar la
ejecución
• Terminar una hebra puede llamar al método
Abort().
• Los métodos Suspend() y Resume() se pueden
utilizar para parar temporalmente la ejecución
de una hebra y a continuación reiniciarla de nuevo
• Sleep() se utiliza para poner una hebra a dormir
durante un periodo de tiempo, normalmente
especificado como un número de milisegundos.
Estados y prioridad de las hebras
La enumeración ThreadState, describe los posibles
estados que puede tener una hebra:
Elementos
• Aborted
• AbortRequested
• Background
• Running
• Stopped
• StopRequested
• Suspended
• SuspendRequested
• Unstarted
• WaitSleepJoin
• Un elemento de la enumeración ThreadPriority,
cuyos valores son:
Elemento
• Hightest
• AboveNormal
• Normal.
• BelowNormal
• Lowest
Sincronización de hebras
• compartidos y por la temporización.
• cada función de la hebra tiene su propio
conjunto de variables locales, puesto que las
variables locales se declaran en la pila
• variables locales no pueden interferir con
otras, porque se
• crean en diferentes pilas.
Las clases sin sincronización
• La clase Interlocked contiene cuatro métodos de
hebra segura compartidos para realizar
operaciones con variables
• estos métodos son atómicos, por lo que no se
pueden
• interrumpir por cambios de contexto de hebras:
• Increment: Incrementa una variable.
• · Decrement: Disminuye una variable.
• · Exchange: Pone una variable a un valor y
devuelve el valor original.
• · CompareExchange: Compara dos valores y
reemplaza el valor destino si son iguales
¿Qué es multithreading?
• El multithreading es manejado internamente por
un programador de threads, una función que el
CLR típicamente delega el sistema operativo.
• Un programador de threads se asegura que
todos los threads activos se encuentren
apropiadamente dispuestos en tiempo de
ejecución, y que los threads que se encuentran
bloqueados - por ejemplo por un bloqueo
exclusivo, o esperando una entrada del usuario -
no consuman recursos de tiempo del CPU.
Threads vs. Procesos
• Todos los threads de una aplicación se
encuentran contenidos en proceso – la unidad
del sistema operativo en la cual una aplicación
corre.
• Los threads tiene ciertas similitudes con los
procesos – por ejemplo los procesos corren bajo
time-sliced con otros procesos en la
computadora de un modo similar a los threads
en una aplicación C#.
• La principal diferencia es que los procesos se
encuentran totalmente aislados de otros
procesos, mientras que los threads comparten el
montículo de memoria (heap) con otros threads
de la misma aplicación.
• Esto hace que los threads sean muy útiles: un
thread puede recuperar datos en segundo plano,
mientras que otro thread va mostrando los datos
mientras llegan.
¿Cuándo utilizar Threads?
• Una aplicación común para el multithreading es
la ejecución en segundo plano de tareas que
consumen mucho tiempo. El thread principal se
mantiene corriendo mientras que el thread que
realiza la operación funciona en segundo plano.
• En aplicaciones Windows Forms, si el thread
principal realiza operaciones largas, los mensajes
del teclado y el mouse no pueden ser
procesados, como resultado la aplicación deja de
responder.
• Por esta razón es bueno hacer que las tareas que
insumen mucho tiempo funcionen en threads de
trabajo y en todo caso el thread principal puede
mostrar el diálogo modal “Procesando… espere
por favor” en caso que el programa no pueda
continuar hasta que la tarea termine.
• Esto asegura que la aplicación no sea tomada
por el sistema operativo como "No responde"
incitando al usuario a forzar la finalización del
proceso!
• El diálogo modal permite implementar un botón
"Cancelar" ya que el diálogo continúa recibiendo
eventos mientras que la tarea es realizada por el
hilo trabajador.
• En el caso de las aplicaciones in interfaz gráfica,
como los servicios de Windows, el
multithreading toma particular importancia
cuando una tarea es potencialmente
consumidora de tiempo porque se encuentra a la
espera de la respuesta de otra computadora
(como un servidor de aplicaciones, un servidor
de base de datos, o un cliente).
• Tener un thread trabajador realizando dicha
tarea significa que el thread que lo instancia se
encontrará inmediatamente libre para hacer
otras cosas.
• Otra aplicación del multithreading es utilizarlo en
métodos que realizan cálculos intensivos. Tales
métodos pueden ejecutarse más rápido en
computadoras con múltiples procesadores si la
carga de trabajo es dividida en múltiples threads.
• La cantidad de procesadores puede obtenerse
por medio de la propiedad
Environment.ProcessorCount.
• Una aplicación C# puede convertirse en multi
thread de dos maneras:
• Creando explícitamente threads adicionales, o
utilizando características del framework .NET
que implícitamente crean threads – como
BackgroundWorker, thread pooling, un threading
timer, un Remoting server, o un Web Services o
una aplicación ASP.NET.
• En estos últimos casos no se tiene control del
multithreading.
¿Cuándo no utilizar Threads?
• El multithreading posee desventajas. La más
grande es que implica mayor complejidad en los
programas. La creación de una aplicación
multiples threads no es compleja, la complejidad
se encuentra en la interacción entre los threads.
• Esto es así cuando la interacción es válida o no, y
puede derivar en largos procesos de desarrollo y
la consecuente susceptibilidad de intermitentes
y difícilmente reproducibles bugs.
• Por esta razón es recomendable mantener el
diseño de la interacción entre los múltiples
threads simple – o no utilizar multithreadingl – a
menos que tangas una peculiar inclinación por
re-ecribir y debuggear!
• El multithreading también implica consumo de
recursos y costo de CPU en crear y cambiar entre
threads si es utilzado en exceso.
• En particular, cuando implica pesados procesos
de lectura/escritura a disco, puede ser más
rápido tener uno o dos threads trabajadores
realizando las tareas en secuencia en lugar de
tener múltiples threads trabajando en
simultáneo.
Creando e iniciando Threads
• Los threads utilizando el constructor de la clase
Thread, pasándole un delegado del tipo
ThreadStart– indicando el método desde donde
debe iniciar la ejecución. Aquí vemos la definición
del delegado ThreadStart:
• public delegate void ThreadStart();
• Llamando al método Start logramos que la ejecución
comience. El thread continúa hasta que su método
retorne, en este punto el thread finaliza.
• Aquí vemos un ejemplo utilizando la sintaxis larga
de C# para crear el delegado TheadStart:
• class ThreadTest
{
static void Main()
{
Thread t = new Thread (new ThreadStart (Go));
t.Start();
new thread.Go(); // Corre
simultaneamente Go() en el thread principal.
}
static void Go()
{
Console.WriteLine ("hello!");
}
• Se puede crear un thread de un modo más
conveniente utilizando la sintaxis corta de C#
para instanciar delegados:
• static void Main()
{
Thread t = new Thread (Go); // No es
necesario utilizar explícitamente ThreadStart
t.Start();
...
}
static void Go()
{
...
}
• En este caso el delegado ThreadStart es inferido por el
compilador. Otro método es utilizar un método anónimo
para iniciar un thread:
• static void Main()
{
Thread t = new Thread (delegate()
{
Console.WriteLine ("Hello!");
}
);
t.Start();
}
• Un thread tiene su propiedad IsAlive en valor true
después de llamar a su método Start(), hasta que el
thread finaliza. Una vez finalizado un thread no puede
ser re-iniciado.
Pasando datos a ThreadStart
• En ejemplo de arriba queremos distinguir mejor
la salida de cada thread, por ejemplo haciendo
que uno de ellos imprima en mayúscula.
• Podemos lograr esto pasando un flag al método
Go: pero no podemos usar el delegado
ThreadStart porque no acepta argumentos.
Afortunadamente en framework .NET define otra
versión del delegado llamada
ParameterizedThreadStart, la cual acepta un
objeto como parámetro del siguiente modo:
• public delegate void ParameterizedThreadStart (object obj);
• Entonces el ejemplo previo se ve así:
• class ThreadTest
{
static void Main()
{
Thread t = new Thread (Go);
t.Start (true);
Go (true)
Go (false);
}
static void Go (object upperCase)
{
bool upper = (bool) upperCase;
Console.WriteLine (upper ? "HELLO!" : "hello!");
}
}
•
hello!
HELLO!
• En este ejemplo el compilador infiere automáticamente el
delegado ParameterizedThreadStart porque el método Go
acepta un objeto como argumento.
• Podríamos haberlo escrito:
Thread t = new Thread (new ParameterizedThreadStart (Go));
t.Start (true);
Nombrando Threads
• Se puede asignar nombre a un thread a través de
su propiedad Name. Esto es de gran beneficio en
la depuración: y también permite hacer
Console.WriteLine nombre del thread, Microsoft
Visual Studio recoge el nombre del thread y lo
muestra en la barra de herramientas Debug
Location.
• Podemos nombrar un thread en cualquier
momento, pero sólo una vez, en caso de intentar
cambiar el nombre de un thread obtendremos
como resultado una excepción.
• También podemos asignarle nombre al thread principal de la aplicación,
en el siguiente ejemplo hacemos esto a través de la propiedad estática
CurrentThread:
class ThreadNaming
{
static void Main()
{
Thread.CurrentThread.Name = "main";
Thread worker = new Thread (Go);
worker.Name = "worker";
worker.Start(); Go();
}
static void Go()
{
Console.WriteLine ("Hello from " + Thread.CurrentThread.Name);
}
}
•
Hello from main
Hello from worker
Threads en primer y segundo
plano
• Por defecto los threads corren en primer plano,
esto quiere decir que la aplicación siguirá
corriendo mientras que alguno de sus threas se
encuentre activo.
• C# soporta threads en segundo plano
(background threads) los cuales no mantiene la
aplicación corriendo por si mismo, sino que
terminan inmediatamente cuando la aplicación
finaliza.
• Cambiar un thread de primer a segundo plano
no cambiar su estado o prioridad en la
planificación del CPU de ninguna manera.
La propiedad IsBackground del thread controla el
modo de ejecución como en el siguiente
ejemplo:
• class PriorityTest
{
static void Main (string[] args)
{
Thread worker = new Thread (delegate() {
Console.ReadLine();
});
if (args.Length > 0) worker.IsBackground = true;
worker.Start();
}
}
• Si llamamos al programa sin pasarle argumentos
el thread de trabajo corre en su modo por
defecto de primer plano y esperará en la
instrucción ReadLine hasta que el usuario
presione Enter. Mientras tanto el thread
principal deja de existir pero la aplicación sigue
corriendo porque existe un thread en primer
plano todabía vivo.
• Por otro lado, si un argumento es pasado al
thread principal (Main()) el thread de trabajo es
ejecutado en segundo plano y el programa deja
de existir cuando el thread principal termina,
finalizando la instrucción ReadLine.
• Cuando un hilo en segundo plano termina de
este modo, todos los bloques finally son
ignorados. Ya que no es deseable ignorar los
bloques finally es una buena práctica esperar a
que todos los threads de trabajo terminen antes
de finalizar la aplicación – posiblemente con un
timeout (esto puede lograrse utilizando
Thread.Join). Si por alguna razón un thread
renegado nunca termina, podemos intentar
abortarlo, y si esto falla, abandonar el thread
permitiendo que muera con el proceso.
• Tener threads en segundo plano puede ser
beneficioso, por la razón que es posible que el
último diga cuando la aplicación debe terminar.
Consideremos la alternativa - un thread en
primer plano que no muere - evitando que la
aplicación termine. Un thread en primer plano
olvidado es particularmente dañino en
aplicaciones Windows Form, porque la
aplicación aparentará terminar (el menos para el
usuario) pero el proceso continuará corriendo.
Preguntas…
• ¿Qué es un proceso y subproceso?
• ¿Qué es un thread?
• ¿Cuál es la diferencia entre estos dos?
• ¿Qué librería se utiliza para poder usar threads?
• ¿Cuáles son algunas de las propiedades de la clase thread?
• ¿Cuándo utilizamos los threads?
• ¿Cuándo no es necesario utilizar threads?
• ¿Qué es multithreading?
• ¿Cuáles son algunos estados y prioridades de los threads?
• Cuando creamos un thread ¿Qué tiempo es asignado para
cada hilo?
Gracias por su atención !!!

Más contenido relacionado

La actualidad más candente

Determinación de los requerimientos
Determinación de los requerimientosDeterminación de los requerimientos
Determinación de los requerimientosximenavillalba
 
Metodologias de desarrollo
Metodologias de desarrolloMetodologias de desarrollo
Metodologias de desarrolloHermes Romero
 
Requerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no FuncionalesRequerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no Funcionalessullinsan
 
Entrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas OperativosEntrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas OperativosKarina Rivra
 
1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.O1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.Olupita zume
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en javaLuis Miguel De Bello
 
Administración de procesos y del procesador
Administración de procesos y del procesadorAdministración de procesos y del procesador
Administración de procesos y del procesadorFernando Camacho
 
Procedimientos especiales
Procedimientos especialesProcedimientos especiales
Procedimientos especialesAnel Sosa
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasJ M
 
Fundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadFundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadJosé Antonio Sandoval Acosta
 
Software en tiempo real
Software en tiempo realSoftware en tiempo real
Software en tiempo realAeivans
 
Ingeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientosIngeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientosCesar Prado
 

La actualidad más candente (20)

Determinación de los requerimientos
Determinación de los requerimientosDeterminación de los requerimientos
Determinación de los requerimientos
 
Metodología RUP
Metodología RUPMetodología RUP
Metodología RUP
 
Metodologias de desarrollo
Metodologias de desarrolloMetodologias de desarrollo
Metodologias de desarrollo
 
Diapositivas xp
Diapositivas xpDiapositivas xp
Diapositivas xp
 
Requerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no FuncionalesRequerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no Funcionales
 
Entrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas OperativosEntrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas Operativos
 
Documento vision
Documento visionDocumento vision
Documento vision
 
5.1 ejemplos uml
5.1 ejemplos uml5.1 ejemplos uml
5.1 ejemplos uml
 
Ingeniería de software modelo incremental
Ingeniería de software  modelo incrementalIngeniería de software  modelo incremental
Ingeniería de software modelo incremental
 
1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.O1.1 Definición y concepto de los S.O
1.1 Definición y concepto de los S.O
 
Transaccion
TransaccionTransaccion
Transaccion
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en java
 
Administración de procesos y del procesador
Administración de procesos y del procesadorAdministración de procesos y del procesador
Administración de procesos y del procesador
 
Casos de uso
Casos de usoCasos de uso
Casos de uso
 
Procedimientos especiales
Procedimientos especialesProcedimientos especiales
Procedimientos especiales
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o Hebras
 
Fundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadFundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: Modularidad
 
Software en tiempo real
Software en tiempo realSoftware en tiempo real
Software en tiempo real
 
UML: CASOS DE USO
UML: CASOS DE USOUML: CASOS DE USO
UML: CASOS DE USO
 
Ingeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientosIngeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientos
 

Destacado

Cimentacion profunda
Cimentacion profundaCimentacion profunda
Cimentacion profundaXtian Svd
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionBoris Salleg
 
What is the ServiceStack?
What is the ServiceStack?What is the ServiceStack?
What is the ServiceStack?Demis Bellot
 
Analisis de costos unitarios columnas, muros, encofrados y desencofrados
Analisis de costos unitarios columnas, muros, encofrados y desencofradosAnalisis de costos unitarios columnas, muros, encofrados y desencofrados
Analisis de costos unitarios columnas, muros, encofrados y desencofradosMarco A. Quispe-Sucasaire
 
Academia Libertad - Programa
Academia Libertad - ProgramaAcademia Libertad - Programa
Academia Libertad - ProgramaCREO_Org
 
Tecnologia y sociedad christian tacha
Tecnologia y sociedad christian tachaTecnologia y sociedad christian tacha
Tecnologia y sociedad christian tachaCristian Tacha
 
economia y desarrollo clase 3
economia y desarrollo clase 3economia y desarrollo clase 3
economia y desarrollo clase 3wendy santivañez
 
Trabajo proyecto de investigacion
Trabajo proyecto de investigacionTrabajo proyecto de investigacion
Trabajo proyecto de investigacionJhoan Palomino
 
Puentes de Medición Electrónica - OA
Puentes de Medición Electrónica - OAPuentes de Medición Electrónica - OA
Puentes de Medición Electrónica - OAJohn Martinez
 
Aparato respiratorio
Aparato respiratorioAparato respiratorio
Aparato respiratorioTERE66
 

Destacado (20)

JSP
JSPJSP
JSP
 
Cimentacion profunda
Cimentacion profundaCimentacion profunda
Cimentacion profunda
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacion
 
What is the ServiceStack?
What is the ServiceStack?What is the ServiceStack?
What is the ServiceStack?
 
LENGUAJE HTML
LENGUAJE HTMLLENGUAJE HTML
LENGUAJE HTML
 
Analisis de costos unitarios columnas, muros, encofrados y desencofrados
Analisis de costos unitarios columnas, muros, encofrados y desencofradosAnalisis de costos unitarios columnas, muros, encofrados y desencofrados
Analisis de costos unitarios columnas, muros, encofrados y desencofrados
 
thy
thythy
thy
 
Inicio tardio
Inicio tardioInicio tardio
Inicio tardio
 
Brayan .p j nicolas
Brayan .p j nicolasBrayan .p j nicolas
Brayan .p j nicolas
 
Academia Libertad - Programa
Academia Libertad - ProgramaAcademia Libertad - Programa
Academia Libertad - Programa
 
Uso de vacunas orales para un control eficaz de la peste porcina clásica
Uso de vacunas orales para un control eficaz de la peste porcina clásicaUso de vacunas orales para un control eficaz de la peste porcina clásica
Uso de vacunas orales para un control eficaz de la peste porcina clásica
 
Tecnologia y sociedad christian tacha
Tecnologia y sociedad christian tachaTecnologia y sociedad christian tacha
Tecnologia y sociedad christian tacha
 
Maryi estructura
Maryi estructuraMaryi estructura
Maryi estructura
 
economia y desarrollo clase 3
economia y desarrollo clase 3economia y desarrollo clase 3
economia y desarrollo clase 3
 
Construcción residencial en Europa. Euroconstruct
Construcción residencial en Europa. EuroconstructConstrucción residencial en Europa. Euroconstruct
Construcción residencial en Europa. Euroconstruct
 
Trabajo proyecto de investigacion
Trabajo proyecto de investigacionTrabajo proyecto de investigacion
Trabajo proyecto de investigacion
 
Normativa pesca 2013
Normativa pesca 2013Normativa pesca 2013
Normativa pesca 2013
 
Sistema endocrino
Sistema endocrinoSistema endocrino
Sistema endocrino
 
Puentes de Medición Electrónica - OA
Puentes de Medición Electrónica - OAPuentes de Medición Electrónica - OA
Puentes de Medición Electrónica - OA
 
Aparato respiratorio
Aparato respiratorioAparato respiratorio
Aparato respiratorio
 

Similar a Uso de threads en C# (20)

Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Lps 17 hilos
Lps 17 hilosLps 17 hilos
Lps 17 hilos
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Thread
ThreadThread
Thread
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Cuadro comparativo hilos
Cuadro comparativo hilosCuadro comparativo hilos
Cuadro comparativo hilos
 
Hilo de ejecución
Hilo de ejecuciónHilo de ejecución
Hilo de ejecución
 
Subprocesamiento Mùltiple
Subprocesamiento MùltipleSubprocesamiento Mùltiple
Subprocesamiento Mùltiple
 
Sistemas operativos threads
Sistemas operativos   threadsSistemas operativos   threads
Sistemas operativos threads
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
PPT CAP 2 Proceso e hilo.pdf
PPT CAP 2 Proceso e hilo.pdfPPT CAP 2 Proceso e hilo.pdf
PPT CAP 2 Proceso e hilo.pdf
 
Hilos hebras
Hilos hebrasHilos hebras
Hilos hebras
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Equipo 2 - Exposición.pptx
Equipo 2 - Exposición.pptxEquipo 2 - Exposición.pptx
Equipo 2 - Exposición.pptx
 
855
855855
855
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptx
 
Clase 3 ene 8
Clase 3 ene 8Clase 3 ene 8
Clase 3 ene 8
 
Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 

Más de Ana Ivonne Val

Lista de actividades del proyecto
Lista de actividades del proyectoLista de actividades del proyecto
Lista de actividades del proyectoAna Ivonne Val
 
Motivacion e inteligencia emocional
Motivacion e inteligencia emocionalMotivacion e inteligencia emocional
Motivacion e inteligencia emocionalAna Ivonne Val
 
Tecnicas de motivacion.
Tecnicas de motivacion.Tecnicas de motivacion.
Tecnicas de motivacion.Ana Ivonne Val
 
Liderazgo transformador
Liderazgo transformadorLiderazgo transformador
Liderazgo transformadorAna Ivonne Val
 
Administración del tiempo
Administración  del tiempoAdministración  del tiempo
Administración del tiempoAna Ivonne Val
 
Liderazo y manejo de grupos-ptt
Liderazo y manejo de grupos-pttLiderazo y manejo de grupos-ptt
Liderazo y manejo de grupos-pttAna Ivonne Val
 
Liderazgo y manejo de grupos
Liderazgo y manejo de gruposLiderazgo y manejo de grupos
Liderazgo y manejo de gruposAna Ivonne Val
 
Sistema de cableado estructurado (scs)
Sistema de cableado estructurado (scs)Sistema de cableado estructurado (scs)
Sistema de cableado estructurado (scs)Ana Ivonne Val
 
Sistema de cableado estructurado 1
Sistema de cableado estructurado 1Sistema de cableado estructurado 1
Sistema de cableado estructurado 1Ana Ivonne Val
 

Más de Ana Ivonne Val (20)

Telecomunicaciones
Telecomunicaciones Telecomunicaciones
Telecomunicaciones
 
Usabilidad
UsabilidadUsabilidad
Usabilidad
 
Marcas de auditoria
Marcas de auditoriaMarcas de auditoria
Marcas de auditoria
 
Lista de actividades del proyecto
Lista de actividades del proyectoLista de actividades del proyecto
Lista de actividades del proyecto
 
Glosario de fibras
Glosario de fibrasGlosario de fibras
Glosario de fibras
 
Motivacion e inteligencia emocional
Motivacion e inteligencia emocionalMotivacion e inteligencia emocional
Motivacion e inteligencia emocional
 
Tecnicas de motivacion.
Tecnicas de motivacion.Tecnicas de motivacion.
Tecnicas de motivacion.
 
Liderazgo transformador
Liderazgo transformadorLiderazgo transformador
Liderazgo transformador
 
La ley de parkinson
La ley de parkinson La ley de parkinson
La ley de parkinson
 
Gestion del tiempo
Gestion del tiempoGestion del tiempo
Gestion del tiempo
 
Autoestima
AutoestimaAutoestima
Autoestima
 
Administración del tiempo
Administración  del tiempoAdministración  del tiempo
Administración del tiempo
 
Liderazo y manejo de grupos-ptt
Liderazo y manejo de grupos-pttLiderazo y manejo de grupos-ptt
Liderazo y manejo de grupos-ptt
 
Liderazgo y manejo de grupos
Liderazgo y manejo de gruposLiderazgo y manejo de grupos
Liderazgo y manejo de grupos
 
Liderazgo
LiderazgoLiderazgo
Liderazgo
 
Cierre del proyecto
Cierre del proyectoCierre del proyecto
Cierre del proyecto
 
Cronograma
CronogramaCronograma
Cronograma
 
Proceso de planeacion
Proceso de planeacionProceso de planeacion
Proceso de planeacion
 
Sistema de cableado estructurado (scs)
Sistema de cableado estructurado (scs)Sistema de cableado estructurado (scs)
Sistema de cableado estructurado (scs)
 
Sistema de cableado estructurado 1
Sistema de cableado estructurado 1Sistema de cableado estructurado 1
Sistema de cableado estructurado 1
 

Último

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 

Último (11)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Uso de threads en C#

  • 1.
  • 2. Integrantes Luis FelipeZacaríasGuzmán Alejandro JavierRomero Rosas Karen Zamora Hernández Ana IvonneToral Morales JoséGuillermo PájaroCoatl DanielAlonso Calvario Bruno Salgado Mejía
  • 3. Funcionamiento de hilos • Todos los hilos se les asigna un tiempo de ejecución apropiado y que todos aquellos hilos que estén bloqueados o pausados no consuman tiempo de CPU. • En un ordenador con un solo procesador, un programador de hilos gestiona una alternancia rápida entre los hilos activos, derivando en un comportamiento entrecortado • La asignación de tiempo para cada hilo está en el orden de las decenas de milisegundos.
  • 4. Hilos y procesos • Todos los hilos dentro de una aplicación están dentro de un proceso. • La diferencia principal es que los procesos están completamente aislados unos de otros • los hilos comparten memoria con otros hilos que pertenecen al mismo proceso • Un hilo puede estar generando datos en un segundo plano mientras que otro hilo muestra los datos que van llegando.
  • 5. Procesos y subprocesos • Para que un proceso sea capaz de hacer • algo, el proceso debe ser propietario de un hilo (thread). • Este thread es el responsable de ejecutar el código contenido en el espacio de direcciones del proceso. • un proceso puede contener varios threads y todos ellos ejecutando código “simultáneamente "en el espacio de direcciones del proceso
  • 6. • cada thread tiene su propia colección de registros de la CPU y su propio stack (pila de almacenamiento) • threads se ejecutan concurrentemente al asignar ‘rodajas de tiempo’ (time slices) llamadas quantums a cada thread alternativamente (y consecutivamente). • cada quantum es de 15 milissegundos.
  • 7. Administración de procesos • Process es un componente que nos permite • Iniciar • detener • controlar • supervisar aplicaciones.
  • 8. Administración de hebras y hilos • El ámbito System.Threading proporciona en la plataforma .NET las clases e interfaces para escribir código multihebra. • Cada hebra con un proceso • Si el proceso crea más hebras, será multihebra(multithreading)
  • 9. Por que son útiles las hebras • En primer lugar, cuando hay una tarea de fondo. Imagine que quiere poner un logotipo que gire en la parte superior izquierda del formulario. • En segundo lugar, cuando esta realizando más de una tarea a la vez Podría dividir la imagen en cuatro partes y ejecutar las cuatro copias en la rutina de procesado de imagen
  • 10. La clase Thread PROPIEDADES • CurrentPrincipal • CurrentThread • IsAlive • IsBackground • Name • Priority • ThreadState
  • 11. METODOS • Abort • Interrupt • Join • Resume • Sleep • Start • Suspend
  • 12. Control de las hebras • Llame a su método Start() para comenzar la ejecución • Terminar una hebra puede llamar al método Abort(). • Los métodos Suspend() y Resume() se pueden utilizar para parar temporalmente la ejecución de una hebra y a continuación reiniciarla de nuevo • Sleep() se utiliza para poner una hebra a dormir durante un periodo de tiempo, normalmente especificado como un número de milisegundos.
  • 13. Estados y prioridad de las hebras La enumeración ThreadState, describe los posibles estados que puede tener una hebra: Elementos • Aborted • AbortRequested • Background • Running • Stopped • StopRequested • Suspended • SuspendRequested • Unstarted • WaitSleepJoin
  • 14. • Un elemento de la enumeración ThreadPriority, cuyos valores son: Elemento • Hightest • AboveNormal • Normal. • BelowNormal • Lowest
  • 15. Sincronización de hebras • compartidos y por la temporización. • cada función de la hebra tiene su propio conjunto de variables locales, puesto que las variables locales se declaran en la pila • variables locales no pueden interferir con otras, porque se • crean en diferentes pilas.
  • 16. Las clases sin sincronización • La clase Interlocked contiene cuatro métodos de hebra segura compartidos para realizar operaciones con variables • estos métodos son atómicos, por lo que no se pueden • interrumpir por cambios de contexto de hebras: • Increment: Incrementa una variable. • · Decrement: Disminuye una variable. • · Exchange: Pone una variable a un valor y devuelve el valor original. • · CompareExchange: Compara dos valores y reemplaza el valor destino si son iguales
  • 17. ¿Qué es multithreading? • El multithreading es manejado internamente por un programador de threads, una función que el CLR típicamente delega el sistema operativo. • Un programador de threads se asegura que todos los threads activos se encuentren apropiadamente dispuestos en tiempo de ejecución, y que los threads que se encuentran bloqueados - por ejemplo por un bloqueo exclusivo, o esperando una entrada del usuario - no consuman recursos de tiempo del CPU.
  • 18. Threads vs. Procesos • Todos los threads de una aplicación se encuentran contenidos en proceso – la unidad del sistema operativo en la cual una aplicación corre. • Los threads tiene ciertas similitudes con los procesos – por ejemplo los procesos corren bajo time-sliced con otros procesos en la computadora de un modo similar a los threads en una aplicación C#.
  • 19. • La principal diferencia es que los procesos se encuentran totalmente aislados de otros procesos, mientras que los threads comparten el montículo de memoria (heap) con otros threads de la misma aplicación. • Esto hace que los threads sean muy útiles: un thread puede recuperar datos en segundo plano, mientras que otro thread va mostrando los datos mientras llegan.
  • 20. ¿Cuándo utilizar Threads? • Una aplicación común para el multithreading es la ejecución en segundo plano de tareas que consumen mucho tiempo. El thread principal se mantiene corriendo mientras que el thread que realiza la operación funciona en segundo plano. • En aplicaciones Windows Forms, si el thread principal realiza operaciones largas, los mensajes del teclado y el mouse no pueden ser procesados, como resultado la aplicación deja de responder.
  • 21. • Por esta razón es bueno hacer que las tareas que insumen mucho tiempo funcionen en threads de trabajo y en todo caso el thread principal puede mostrar el diálogo modal “Procesando… espere por favor” en caso que el programa no pueda continuar hasta que la tarea termine. • Esto asegura que la aplicación no sea tomada por el sistema operativo como "No responde" incitando al usuario a forzar la finalización del proceso! • El diálogo modal permite implementar un botón "Cancelar" ya que el diálogo continúa recibiendo eventos mientras que la tarea es realizada por el hilo trabajador.
  • 22. • En el caso de las aplicaciones in interfaz gráfica, como los servicios de Windows, el multithreading toma particular importancia cuando una tarea es potencialmente consumidora de tiempo porque se encuentra a la espera de la respuesta de otra computadora (como un servidor de aplicaciones, un servidor de base de datos, o un cliente). • Tener un thread trabajador realizando dicha tarea significa que el thread que lo instancia se encontrará inmediatamente libre para hacer otras cosas.
  • 23. • Otra aplicación del multithreading es utilizarlo en métodos que realizan cálculos intensivos. Tales métodos pueden ejecutarse más rápido en computadoras con múltiples procesadores si la carga de trabajo es dividida en múltiples threads. • La cantidad de procesadores puede obtenerse por medio de la propiedad Environment.ProcessorCount.
  • 24. • Una aplicación C# puede convertirse en multi thread de dos maneras: • Creando explícitamente threads adicionales, o utilizando características del framework .NET que implícitamente crean threads – como BackgroundWorker, thread pooling, un threading timer, un Remoting server, o un Web Services o una aplicación ASP.NET. • En estos últimos casos no se tiene control del multithreading.
  • 25. ¿Cuándo no utilizar Threads? • El multithreading posee desventajas. La más grande es que implica mayor complejidad en los programas. La creación de una aplicación multiples threads no es compleja, la complejidad se encuentra en la interacción entre los threads. • Esto es así cuando la interacción es válida o no, y puede derivar en largos procesos de desarrollo y la consecuente susceptibilidad de intermitentes y difícilmente reproducibles bugs.
  • 26. • Por esta razón es recomendable mantener el diseño de la interacción entre los múltiples threads simple – o no utilizar multithreadingl – a menos que tangas una peculiar inclinación por re-ecribir y debuggear!
  • 27. • El multithreading también implica consumo de recursos y costo de CPU en crear y cambiar entre threads si es utilzado en exceso. • En particular, cuando implica pesados procesos de lectura/escritura a disco, puede ser más rápido tener uno o dos threads trabajadores realizando las tareas en secuencia en lugar de tener múltiples threads trabajando en simultáneo.
  • 28. Creando e iniciando Threads • Los threads utilizando el constructor de la clase Thread, pasándole un delegado del tipo ThreadStart– indicando el método desde donde debe iniciar la ejecución. Aquí vemos la definición del delegado ThreadStart: • public delegate void ThreadStart(); • Llamando al método Start logramos que la ejecución comience. El thread continúa hasta que su método retorne, en este punto el thread finaliza.
  • 29. • Aquí vemos un ejemplo utilizando la sintaxis larga de C# para crear el delegado TheadStart: • class ThreadTest { static void Main() { Thread t = new Thread (new ThreadStart (Go)); t.Start(); new thread.Go(); // Corre simultaneamente Go() en el thread principal. } static void Go() { Console.WriteLine ("hello!"); }
  • 30. • Se puede crear un thread de un modo más conveniente utilizando la sintaxis corta de C# para instanciar delegados: • static void Main() { Thread t = new Thread (Go); // No es necesario utilizar explícitamente ThreadStart t.Start(); ... } static void Go() { ... }
  • 31. • En este caso el delegado ThreadStart es inferido por el compilador. Otro método es utilizar un método anónimo para iniciar un thread: • static void Main() { Thread t = new Thread (delegate() { Console.WriteLine ("Hello!"); } ); t.Start(); } • Un thread tiene su propiedad IsAlive en valor true después de llamar a su método Start(), hasta que el thread finaliza. Una vez finalizado un thread no puede ser re-iniciado.
  • 32. Pasando datos a ThreadStart • En ejemplo de arriba queremos distinguir mejor la salida de cada thread, por ejemplo haciendo que uno de ellos imprima en mayúscula. • Podemos lograr esto pasando un flag al método Go: pero no podemos usar el delegado ThreadStart porque no acepta argumentos. Afortunadamente en framework .NET define otra versión del delegado llamada ParameterizedThreadStart, la cual acepta un objeto como parámetro del siguiente modo:
  • 33. • public delegate void ParameterizedThreadStart (object obj); • Entonces el ejemplo previo se ve así: • class ThreadTest { static void Main() { Thread t = new Thread (Go); t.Start (true); Go (true) Go (false); } static void Go (object upperCase) { bool upper = (bool) upperCase; Console.WriteLine (upper ? "HELLO!" : "hello!"); } } • hello! HELLO!
  • 34. • En este ejemplo el compilador infiere automáticamente el delegado ParameterizedThreadStart porque el método Go acepta un objeto como argumento. • Podríamos haberlo escrito: Thread t = new Thread (new ParameterizedThreadStart (Go)); t.Start (true);
  • 35. Nombrando Threads • Se puede asignar nombre a un thread a través de su propiedad Name. Esto es de gran beneficio en la depuración: y también permite hacer Console.WriteLine nombre del thread, Microsoft Visual Studio recoge el nombre del thread y lo muestra en la barra de herramientas Debug Location. • Podemos nombrar un thread en cualquier momento, pero sólo una vez, en caso de intentar cambiar el nombre de un thread obtendremos como resultado una excepción.
  • 36. • También podemos asignarle nombre al thread principal de la aplicación, en el siguiente ejemplo hacemos esto a través de la propiedad estática CurrentThread: class ThreadNaming { static void Main() { Thread.CurrentThread.Name = "main"; Thread worker = new Thread (Go); worker.Name = "worker"; worker.Start(); Go(); } static void Go() { Console.WriteLine ("Hello from " + Thread.CurrentThread.Name); } } • Hello from main Hello from worker
  • 37. Threads en primer y segundo plano • Por defecto los threads corren en primer plano, esto quiere decir que la aplicación siguirá corriendo mientras que alguno de sus threas se encuentre activo. • C# soporta threads en segundo plano (background threads) los cuales no mantiene la aplicación corriendo por si mismo, sino que terminan inmediatamente cuando la aplicación finaliza.
  • 38. • Cambiar un thread de primer a segundo plano no cambiar su estado o prioridad en la planificación del CPU de ninguna manera. La propiedad IsBackground del thread controla el modo de ejecución como en el siguiente ejemplo:
  • 39. • class PriorityTest { static void Main (string[] args) { Thread worker = new Thread (delegate() { Console.ReadLine(); }); if (args.Length > 0) worker.IsBackground = true; worker.Start(); } }
  • 40. • Si llamamos al programa sin pasarle argumentos el thread de trabajo corre en su modo por defecto de primer plano y esperará en la instrucción ReadLine hasta que el usuario presione Enter. Mientras tanto el thread principal deja de existir pero la aplicación sigue corriendo porque existe un thread en primer plano todabía vivo. • Por otro lado, si un argumento es pasado al thread principal (Main()) el thread de trabajo es ejecutado en segundo plano y el programa deja de existir cuando el thread principal termina, finalizando la instrucción ReadLine.
  • 41. • Cuando un hilo en segundo plano termina de este modo, todos los bloques finally son ignorados. Ya que no es deseable ignorar los bloques finally es una buena práctica esperar a que todos los threads de trabajo terminen antes de finalizar la aplicación – posiblemente con un timeout (esto puede lograrse utilizando Thread.Join). Si por alguna razón un thread renegado nunca termina, podemos intentar abortarlo, y si esto falla, abandonar el thread permitiendo que muera con el proceso.
  • 42. • Tener threads en segundo plano puede ser beneficioso, por la razón que es posible que el último diga cuando la aplicación debe terminar. Consideremos la alternativa - un thread en primer plano que no muere - evitando que la aplicación termine. Un thread en primer plano olvidado es particularmente dañino en aplicaciones Windows Form, porque la aplicación aparentará terminar (el menos para el usuario) pero el proceso continuará corriendo.
  • 43. Preguntas… • ¿Qué es un proceso y subproceso? • ¿Qué es un thread? • ¿Cuál es la diferencia entre estos dos? • ¿Qué librería se utiliza para poder usar threads? • ¿Cuáles son algunas de las propiedades de la clase thread? • ¿Cuándo utilizamos los threads? • ¿Cuándo no es necesario utilizar threads? • ¿Qué es multithreading? • ¿Cuáles son algunos estados y prioridades de los threads? • Cuando creamos un thread ¿Qué tiempo es asignado para cada hilo?
  • 44. Gracias por su atención !!!