Introducción detallada a Thread
Los subprocesos son entidades en un proceso. Un proceso puede tener múltiples subprocesos y un subproceso debe tener un proceso principal. El subproceso no posee recursos del sistema, solo algunas estructuras de datos necesarias para la operación; comparte todos los recursos que posee el proceso con otros subprocesos del proceso principal. Los subprocesos pueden crear y destruir subprocesos para lograr la ejecución simultánea de programas. Generalmente, los subprocesos tienen tres estados básicos: listo, bloqueado y en ejecución. En un sistema de múltiples CPU, se pueden ejecutar diferentes subprocesos en diferentes CPU al mismo tiempo, incluso cuando pertenecen al mismo proceso. La mayoría de los sistemas operativos que admiten multiprocesadores proporcionan interfaces de programación que permiten a los procesos controlar la afinidad entre sus propios subprocesos y cada procesador.
A veces, los subprocesos también se denominan procesos ligeros. Al igual que los procesos, los subprocesos son rutas de ejecución independientes y concurrentes en el programa. Cada subproceso tiene su propia pila, su propio contador de programa y sus propias variables locales. Sin embargo, los subprocesos dentro de un proceso están menos aislados entre sí que los procesos separados. Comparten memoria, identificadores de archivos y otros estados que debería tener cada proceso.
Un proceso puede soportar múltiples subprocesos, que parecen ejecutarse simultáneamente pero no están sincronizados entre sí. Varios subprocesos en un proceso comparten el mismo espacio de direcciones de memoria, lo que significa que pueden acceder a las mismas variables y objetos, y asignan objetos del mismo montón. Aunque esto facilita compartir información entre subprocesos, debe tener cuidado de asegurarse de que no interfieran con otros subprocesos en el mismo proceso.
Las API y las herramientas de subprocesamiento de Java son engañosamente simples. Sin embargo, escribir programas complejos que utilicen subprocesos de manera eficiente no es muy fácil. Debido a que existen varios subprocesos en el mismo espacio de memoria y comparten las mismas variables, debe tener cuidado de asegurarse de que sus subprocesos no interfieran entre sí.