TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Instituto Tecnológico Superior
Purhépecha
Alumnos(as): José Ángel Gallardo Trejo (1903009), Angel
Luis Ambrocio Sixtos
Grupo: 5 A
Materia: Sistemas operativos
Tema 2: Administración de procesos y del procesador
Actividad 2: Diferencias fundamentales y específicas de
proceso, thread y multi-thread.
Profesora: Mtra. Brenda Liliana Guillén Rodríguez
05/Octubre /2021
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Proceso, thread y multi-thread.
Un Proceso es algo que te resulta bastante familiar. Si lanzas Microsoft Word y VFP,
entonces tienes dos procesos separados que están corriendo al mismo tiempo, aunque
sólo tengas una CPU. El sistema operativo asigna tiempo a cada uno de los procesos y
pasa de uno a otro según le interesa. En un sistema multitarea no-preventivo (una tarea
es sinónimo de un proceso) tal como Windows 3.1, un proceso puede paralizar la
ejecución de otro proceso, pues el sistema operativo pasa un mensaje a cada proceso y
este lo interpreta,
mientras un proceso interpreta un mensaje los demás procesos están detenidos Aunque
los procesos constituyen el bloque básico en la implementación de sistemas distribuidos,
la práctica muestra que el plantear la granularidad (división) de un sistema distribuido en
diferentes procesos, tal como lo establecen los sistemas operativos en los que se
construyen los sistemas distribuidos, no es suficiente. Resulta que plantear una
granularidad más fina en la forma de threads múltiples de control por proceso, hace más
fácil desarrollar aplicaciones distribuidas y obtener un mejor desempeño.
Thread
Una thread es un único flujo de control dentro de un programa. Algunas veces es llamado
contexto de ejecución porque cada thread debe tener sus propios recursos, como el
program counter y el stack de ejecución, como el contexto de ejecución. Sin embargo,
toda thread en un programa aún comparte muchos recursos, tales como espacio de
memoria y archivos abiertos. Threads también son llamadas procesos livianos (lightweight
process).
Thread Paralelas y Concurrentes
Cuando dos threads corren en paralelo, ambas están siendo corridas al mismo tiempo en
diferentes CPUs. Dos thread concurrentes están en progreso, o intentando de obtener
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
tiempo de ejecución de la CPU al mismo tiempo, pero no necesariamente están corriendo
en forma simultánea en dos CPUs diferentes.
Creación y ejecución de Threads
Hay dos formas de hacer una tarea correr concurrentemente con otra: crear una nueva
clase como subclase de la clase Thread o declarar una clase e implementar la interfaz
Runnable.
Uso de Subclase: Cuando se crea una subclase de Thread, la subclase debería definir
su propio método run () para sobre montar el método run () de la clase Thread. La tarea
concurrente es desarrollada en este método run ().
Ejecución del método run (): Una instancia de la subclase es creada con new, luego
llamamos al método start () de la thread para hacer que la máquina virtual Java ejecute el
método run (). Ojo para iniciar la concurrencia invocamos a start (), así invocamos a run ()
en forma indirecta. Si invocamos a run () directamente, se comportará como el llamado a
cualquier método llamado dentro de un mismo hilo (sin crear uno independiente).
Implementación de la Interfaz Runnable: La interfaz Runnable requiere que sólo un
método sea implementado, el método run (). Primero creamos una instancia de esta clase
con new, luego creamos una instancia de Thread con otra sentencia new y usamos el
objeto recién creado en el constructor. Finalmente, llamamos el método start () de la
instancia de Thread para iniciar la tarea definida en el método run ().
Ciclo de Vida de una Thread
Cada hilo, después de su creación y antes de su fin, estará en uno de cuatro estados:
recién creada, "corrible", bloqueada, o muerta.
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Recién creada (New thread): entra aquí inmediatamente después de su creación. Es
decir, luego del llamado a new. En este estado los datos locales son ubicados e iniciados.
Luego de la invocación a start (), el hilo pasa al estado "corrible".
Corrible (Runnable): Aquí el contexto de ejecución existe y el hilo puede ocupar la CPU
en cualquier momento. Este estado puede subdividirse en dos: Corriendo y encolado. La
transición entre estos dos estados es manejada por le itinerador de la máquina virtual.
Bloqueada (not Runnable): Se ingresa cuando: se invoca suspend (), el hilo invoca el
método wait () de algún objeto, el hilo invoca sleep (), el hilo espera por alguna operación
de I/O, o el hilo invoca join () de otro hilo para espera por su término. El hilo vuelve al
estado Corrible cuando el evento por que espera ocurre.
Muerta (Dead): Se llega a este estado cuando el hilo termina su ejecución (concluye el
método run) o es detenida por otro hilo llamando al su método stop (). Esta última acción
Multithreading
El subprocesamiento múltiple en Java es un proceso de ejecución de dos o más
subprocesos simultáneamente para una utilización máxima de la CPU.
Las aplicaciones multiproceso son donde dos o más hilos se ejecutan simultáneamente;
por lo tanto, también se conoce como Concurrencia en Java. Esta multitarea está hecha,
cuando múltiples procesos comparten recursos comunes como CPU, memoria, etc.
Cada hilo se ejecuta en paralelo el uno al otro. Los subprocesos no asignan área de
memoria separada; por lo tanto, ahorra memoria. Además, el cambio de contexto entre
hilos lleva menos tiempo. no es recomendada.
Ventajas de multihilo:
Los usuarios no están bloqueados porque los hilos son independientes, y
podemos realizar varias operaciones a veces
Como tal, los hilos son independientes, los otros hilos no se verán afectados si un
hilo cumple una excepción.
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Ejemplo en java:
Clase principal Hilo
Clase principal la cual implementaremos los hilos resultantes de las clases de Proceso1 y
Proceso 2.
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Clase proceso 1
Implementando la palabra reservada “extends” heredando la clase Thread, establecida
como la clase PADRE proporcionada por java.
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Clase proceso 2
Se implementa el mismo proceso y estructura de clase de la clase Proceso1.
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Corriendo clase principal:
(en la cual se nos muestra los procesos 1 y 2 ejecutándose al mismo tiempo haciendo uso
de Threads)
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Segundo resultado:
(mismos procesos, ejecutados al mismo tiempo, pero en diferente orden de salida)
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Conclusión
En conclusión, los procesos, hilos y multihilos son de alguna manera, bastante necesario
en la programación para cosas más complejas, esto puede parecer que no es beneficioso,
pero en realidad es bastante provechoso, en especial en computadores medianamente
decentes, ya que, al realizar múltiples procesos se puede llegar a acortar el tiempo
necesario para correr y finalizar un programa.
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico Superior Purhépecha
Bibliografías
fpress. (12 de marzo de 2019). fpress. Obtenido de Procesos, threads e hilos:
https://www.fpress.com/revista/Num9904/Abr99.htm
microcontroladores. (12 de abril de 2015). microcontroladores. Obtenido de Qué es un Hilo de
Ejecución (Thread) y su uso: http://microcontroladores.org/que-es-un-hilo-de-ejecucion-
thread-y-su-uso/
wikipedia. (30 de agosto de 2021). wikipedia. Obtenido de Hilo_(informática):
https://es.wikipedia.org/wiki/Hilo_(informática)