Quais são as diferenças entre processos e threads

Resumo : neste tutorial você aprenderá sobre os processos e threads e, mais importante, as principais diferenças entre eles.

Introdução a processos e threads

Suponha que você tenha um programa Python simples:

x = 10
y = 20
z = x + y

Os computadores não entendem Python. Eles entendem apenas código de máquina, que é um conjunto de instruções contendo zero e um.

Portanto, você precisa de um interpretador Python para executar este programa Python, que traduz o código Python em código de máquina.

Quando você executa o python app.pycomando, o interpretador Python (CPython) compila o app.pyarquivo em código de máquina. E então o sistema operacional (SO) precisa carregar o programa na memória (RAM) para executá-lo.

Depois que o sistema operacional carrega o programa na memória, ele move as instruções para a CPU para execução via barramento.

Em geral, o sistema operacional move as instruções para uma fila, também conhecida como pipeline. Então, a CPU executará as instruções do pipeline.

Por definição, um processo é uma instância de um programa executado em um computador. E um thread é uma unidade de execução dentro de um processo.

Observe que se você iniciar um programa diversas vezes, você terá um único programa, mas vários processos, cada um representando uma instância do programa.

Um programa é como uma classe, enquanto os processos são como objetos da classe.

A imagem a seguir ilustra o fluxo de execução de um programa Python em um computador:

Diferenças entre Processos e Threads - Execução de CPU de núcleo único

Até agora, você aprendeu como desenvolver um programa que possui um processo com um thread . Portanto, às vezes os termos processo e thread são frequentemente usados ​​de forma intercambiável.

Um programa pode ter um ou mais processos e um processo pode ter um ou mais threads.

Quando um programa possui vários processos, ele é chamado de multiprocessamento . Se um programa tiver vários threads, ele é chamado de multithreading .

Processadores de núcleo único

No passado, uma CPU tinha apenas um núcleo. Em outras palavras, ele pode executar apenas um único processo por vez. Para executar vários processos “ao mesmo tempo”, o SO utiliza um componente de software chamado agendador :

O agendador é como um switch que agenda processos. A principal tarefa do escalonador é selecionar as instruções e submetê-las para execução regularmente.

O agendador alterna entre processos tão rapidamente (cerca de 1 ms) que cria a ilusão de que o computador é capaz de executar vários processos simultaneamente.

Processadores multicore

Hoje, a CPU geralmente possui múltiplos núcleos, por exemplo, dois núcleos (dual-core) e quatro núcleos (quad-core).

O número de núcleos determinará o número de processos que a CPU pode executar simultaneamente. Geralmente, quanto mais núcleos a CPU tiver, mais processos ela poderá realmente executar simultaneamente.

Por exemplo, uma CPU dual-core pode executar exatamente dois processos simultaneamente e uma CPU quad-core pode executar no máximo quatro processos simultaneamente.

O multiprocessamento  usa uma CPU multinúcleo em um único computador, que de fato executa vários processos em paralelo.

Tarefas vinculadas à CPU versus tarefas vinculadas à E/S

Em geral, os programas lidam com dois tipos de tarefas: vinculadas à E/S ou vinculadas à CPU.

  • Tarefas vinculadas a E/S gastam mais tempo fazendo E/S do que fazendo cálculos. Os exemplos típicos de tarefas vinculadas a E/S são solicitações de rede, conexões de banco de dados e leitura/gravação de arquivos.
  • Em contraste, as tarefas vinculadas à CPU consomem mais tempo computando do que gerando solicitações de E/S. Os exemplos típicos de tarefas vinculadas à CPU são multiplicação de matrizes, localização de números primos, compactação de vídeo e streaming de vídeo.

Tecnicamente, o multithreading é adequado para tarefas vinculadas a E/S e o multiprocessamento é adequado para tarefas vinculadas à CPU.

As principais diferenças entre processos e threads

A tabela a seguir ilustra as principais diferenças entre um processo e um thread:

Critério Processo Fio
Compartilhamento de memória A memória não é compartilhada entre processos A memória é compartilhada entre threads dentro de um processo
Pegada de memória Grande Pequeno
Processamento vinculado à CPU e vinculado à E/S Otimizado para tarefas vinculadas à CPU Otimizado para tarefas vinculadas a E/S
Hora de início Mais lento que um fio Mais rápido que um processo
Interruptibilidade Os processos filhos são interrompíveis. Threads não são interrompíveis.

Resumo

  • Um processo é uma instância de um programa em execução em um computador.
  • Um programa pode ter um ou mais processos e um processo pode ter um ou mais threads.
  • Um thread é uma unidade de execução dentro de um processo.
  • Um processo pode ter um ou mais threads.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *