thread
Um programa (tarefa) é uma sequência de instruções, composto por desvios, repetições (iterações) e chamadas de procedimentos e/ou funções. Em um ambiente de programação monothread, um processo suporta apenas um programa no seu espaço de endereçamento e apenas uma instrução do programa é executada. Caso seja necessário criar-se aplicações concorrentes e paralelas são implementados múltiplos processos independentes e/ou subprocessos.
A utilização de (sub)processos independentes permite dividir uma aplicação em partes que podem trabalhar de forma concorrente. Por exemplo, suponha que um processo seja responsável pelo acesso a um banco de dados e existam vários usuários solicitando consultas sobre esta base. Caso um usuário solicite um relatório impresso de todos os registros, os demais usuários terão de aguardar até que a operação termine.
Multithread
Na tentativa de diminuir o tempo gasto na criação/eliminação de (sub) processos, bem como economizar recursos do sistema como um todo, foi introduzido o conceito de thread. Em um ambiente de múltiplos threads (multithread), não é necessário haver vários processos para se implementar aplicações concorrentes. No ambiente multithread, cada processo pode responder a várias solicitações concorrentemente ou mesmo simultaneamente, se houver mais de um processador. existe apenas um processo com três threads de execução, cada um com seu program counter (PC).
Threads compartilham o processador da mesma maneira que um processo. Por exemplo, enquanto um thread espera por uma operação de E/S, outro thread pode ser executado. Cada thread possui seu próprio conjunto de registradores (contexto de hardware), porém compartilha o mesmo espaço de endereçamento com os demais threads do processo. Os threads de um mesmo processo compartilham, além do espaço de endereçamento, outros atributos, como temporizadores e arquivos, de forma natural e eficiente.