Multithreading es una característica de Java que permite la ejecución simultánea de dos o más partes de un programa para la máxima utilización de la CPU. Cada parte de un programa de este tipo se denomina hilo. Entonces, los hilos son procesos livianos dentro de un proceso.
La principal diferencia es que los subprocesos dentro del mismo proceso se ejecutan en el espacio de memoria compartida, mientras que los procesos se ejecutan en espacios de memoria separados. Un hilo es una ruta de ejecución dentro de un proceso. Un proceso puede contener varios subprocesos. Ahora analicemos las diferencias entre los subprocesos de Java y los subprocesos del sistema operativo. Aquí, primero, definiremos ambos junto con la ayuda de un programa en el que podamos encajar para vivir una mejor comprensión y, por último, tabularemos las diferencias entre ellos de manera tabular.
Subprocesos de Java frente a subprocesos del sistema operativo
Punto clave | Subprocesos del sistema operativo | Subprocesos de Java |
---|---|---|
Definición | Un subproceso es la unidad de procesamiento más pequeña que se puede realizar en un sistema operativo. | Un hilo, en el contexto de Java, es el camino seguido al ejecutar un programa |
Hilos mínimos | Un proceso puede contener varios subprocesos. | Los programas Java tienen al menos un hilo, conocido como el hilo principal |
Tipos | Subprocesos a nivel de usuario y subprocesos a nivel de kernel | Hilos de usuario y hilos de Daemon. |
Creado/Administrado por | Sistema operativo | Java Virtual Machine (JVM) al inicio del programa, cuando se invoca el método main() con el subproceso principal. |
Comunicación | Los hilos pueden compartir datos comunes y la comunicación es más fácil. | esperar(), notificar(), notificarTodos() son métodos utilizados para que los subprocesos se comuniquen. |
Programación de subprocesos |
1) Programación de subprocesos de nivel de usuario (ULT) a subprocesos de nivel de kernel (KLT) a través de un proceso ligero (LWP) por parte del desarrollador de la aplicación. 2) Programación de subprocesos a nivel de kernel por parte del programador del sistema para realizar diferentes funciones únicas del sistema operativo. |
El programador de subprocesos en Java es la parte de la JVM que decide qué subproceso debe ejecutarse. Tipos: 1) Programación preventiva, 2) Fragmentos de tiempo. |
Sincronización | La forma más popular de lograr la sincronización de subprocesos es mediante Mutexes. | Implementado usando monitores, sincronizando usando bloques sincronizados. |
Implementación usando modelos | Muchos a uno, uno a uno, muchos a muchos | Modelo Green Thread (modelo muchos a uno), modelo Native Thread (modelo muchos a muchos) |
Detección de punto muerto |
1) Si los recursos tienen una sola instancia 2) Si hay varias instancias de recursos |
1) bloque sincronizado anidado o tratando de obtener un bloqueo en un objeto diferente o llamando a un método sincronizado desde otro método sincronizado 2) para usar el portal io. Nos permite subir un volcado de hilo y analizarlo. 3) también puede usar jConsole o VisualVM para detectar puntos muertos |
Prevención de interbloqueo | Se puede hacer con el Algoritmo de Banker. |
1) Evite bloqueos innecesarios 2) Evite las cerraduras anidadas 3) Usar el método Thread.join() 4) Usar orden de bloqueo 5) Tiempo de espera de bloqueo |
Además, eche un vistazo a los diferentes estados de subprocesos:
Nota: Los subprocesos verdes se abandonaron en Sun JVM para Linux a partir del lanzamiento de la versión 1.3 y se utilizan subprocesos nativos administrados por el sistema operativo. Consulte esto para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por pyatasandeep y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA