É muito comum um Processo criar um outro Processo para executar uma tarefa ou, ainda, um Processo criar threads para realizar uma tarefa.
Subprocesso
Um Processo pode criar outros Processos de maneira hierárquica. Quando um Processo (Processo pai) cria um outro, chamamos o Processo criado de Subprocesso ou Processo filho.
O Subprocesso, por sua vez, pode criar outros Subprocessos. Como consequência dessa estrutura, caso um Processo deixe de existir, os Subprocessos subordinados são eliminados.
O uso de Subprocessos no desenvolvimento de aplicações concorrentes demanda consumo de diversos recursos do Sistema.
Sempre que um novo Processo é criado, o Sistema deve alocar recursos para cada Processo.
Threads
O conceito de thread surgiu para diminuir o tempo gasto na criação/eliminação de Processos, e também para economizar recursos do Sistema como um todo.
Um thread é uma entidade de execução dentro de um Processo. O Processo que conhecemos é um Processo com um único thread (monothread).
Na realidade, é possível ter mais de uma linha de execução em um Processo. Esse tipo de Processo é chamado Processo com múltiplos threads, ou Multithread.
De forma simplificada, um thread pode ser definido como uma sub-rotina de um Programa que pode ser executada de forma assíncrona, ou seja, executada paralelamente ao Programa chamador.
Threads compartilham os recursos de um Processo (espaço de endereçamento, arquivos abertos).
Em um Sistema multiprocessador, múltiplos threads são capazes de executar simultaneamente.
Threads – Vantagens:
- É mais rápido criar um thread que um Processo;
- É mais rápido eliminar um thread que um Processo;
- É mais rápido alternar threads de um mesmo Processo;
- Threads podem se comunicar facilmente, pois compartilham memória e arquivos;
- Em um ambiente multithread, os threads se alternam no uso do processador;
- Em um ambiente multithread com multiprocessamento, as tarefas podem ser executadas em paralelo.