O que é processo e um thread?
Tags: process, thread, beginners, braziliandevs
Published: 2023-01-17 16:25:10

Hoje vamos falar um pouco de CPU. 
Mais especificamente de processos e threads! 
Falaremos aqui de forma simples sem entrar em muitos detalhes, para um entedimento básico do assunto.


## O que é um processo? 
Um processo em palavras simples é alguma coisa usar uma CPU(um processador). 
Ou seja de forma simplificada, se um computador tem um só núcleo, ele só pode executar 1 processo por vez! Um único programa apenas! Hoje todos os novos chips tem N núcleos. Ou seja qualquer novo computador ou celular tem muitos processadores. 


Quando você abre um programa, ele usa um processo. Ele ocupa totalmente esse CPU(no caso de um único núcleo)! 
Antigamente quando só existia um unico núcleo ele ficaria tomado 100% do tempo por um unico programa! 

Mas, resolveram isso de forma simples.
o kernel, por meio de uma interrupção de timer ou outro mecanismo semelhante, suspende um, salvando seu estado de máquina e substituindo-o pelo estado salvo anteriormente de outro. 

O programa(processo) usa o núcleo por poucos milesimos, ai salva tudo na memoria. E outro processo passa a usar aquele núcleo por mais alguns milésimos tudo é salvo. Ai se pega o que foi salvo antes e processa por alguns milésimos, salva e assim por diante. É tão rapido que tudo parece paralelo. 


Isso tudo em termos simples! 
Hoje funciona de modo parecido!

Seu computador e celular tem bem mais de um núcleo.

Se você abrir poucos programas pode ser que nem se use todos os núcleos. Assim economizando energia eletrica. 
Não tem motivos para usar todos os processadores é mais barato usar poucos.
Hoje um processo pode estar em mais de um núcleo ao mesmo tempo.
O navegador Chrome por exemplo, usa multiplos processos! Cada aba que você abre é um novo processo sendo criado pelo Chrome!  
Hoje mesmo com multinúcleos a maioria dos programas usa um só!

Um processo pode criar outros processos, o qual chamamos de processos filhos! 

O processo pode ter os seguintes estados: novo, pronto, em execução, aguardando, encerrado, suspenso. 

As operações de processo podem ser facilmente controladas com a ajuda do PCB (bloco de controle de processo). Você pode considerá-lo como o cérebro do processo, que contém todas as informações cruciais relacionadas ao processamento, como id do processo, prioridade, estado e registro de conteúdo da CPU, etc.
 

Um processo é único. Não conversa facilmente com outro. Não compartilham memoria. 
Para você conversar com outro processo precisa usar mensagens de IPC(Inter-Process Communication) 
Onde cada mensagem enviada é copiada para o outro processo. 

Processo 1 - "Oi processo 2"

A mensagem "Oi processo 2" acaba de ser copiada

Processo 2, recebe a mensagem 
Processo 2 - "Oi, recebi usa mensagem"

A mensagem "Oi, recebi usa mensagem" acaba de ser copiada 

Processo 1, recebe a mensagem. 


- A criação de cada processo requer chamadas de sistema separadas para cada processo.
- É uma entidade de execução isolada e não compartilha dados e informações.
- Os processos usam o mecanismo IPC (Inter-Process Communication) para comunicação que aumenta significativamente o número de chamadas do sistema.
- O gerenciamento de processos leva mais chamadas de sistema.
- Um processo tem sua própria pilha, memória heap com memória e mapa de dados.
- Um processo demora para ser criado, demora mais pra terminar! 

Agora sabemos o que é um processo por cima, sem muitos detalhes e existe muito mais coisas, Tem muito mais material detalhado na web, com todos os conceitos bem explicados. Passo a passo deixarei fontes no fim do artigo!



## O que é thread? 
Vamos falar de forma alta. Sem detalhes! 

Sabemos o que é um processo. Mas dentro dele podem ter threads(um mini processo por núcleo). Um processo pode ter várias threads. Todos os threads de um processo compartilhamo mesmo espaço na memória e recursos do sistema.
Se um thread abrir um arquivo, outro pode ler ou mexer nele! 
Isso não acontece entre processos! 

Vamos imaginar que dentro de um processo existem vários pequenos trabalhadores. 
Mais ou menos como uma fabrica. 
Um processo com muitos funcionarios. 

O bom de thread é que elas compartilham coisas! 
Como estão dentro de um mesmo processo, tudo que o processo tem acesso, thread também tem! 
Ou seja, threads podem conversar entre si e podem acessar os mesmos pontos da memória! 
Isso torna as coisas mais rápidas! 
Mas não mais simples de gerenciar! 

Threads podem ter 3 estados: em execução, pronto e bloqueado. 

Thread também é conhecido como processo leve. A ideia é alcançar o paralelismo dividindo um processo em vários threads. Por exemplo, em um navegador, várias guias podem ser threads diferentes. O MS Word usa vários threads: um thread para formatar o texto, outro thread para processar entradas. 
Programas que suportam multithreading podem ser complicados de gerenciar! 

Usando processos tudo fica separado!
E quem gerencia seu funcionamento é o sistema operacional, multithreading quem deve gerenciar é o programador! 

Então entendemos que um processo pode ter muitos threads. 
Cada thread pode fazer uma coisa. 
Se bem gerenciado pode se usar muitos thread e executar coisas em paralelo(literalmente). 
Antes cada processo rodada na sua vez. 
Agora cada thread pode rodar ao mesmo tempo! 

Multithreading em sistemas com multiprocessadores é realmente muito mais difícil, já que você tem problemas de acesso simultâneo à memória de várias CPUs/núcleos e todos os problemas desagradáveis ​​de sincronização de memória que surgem disso.

- Uma única chamada de sistema pode criar mais de um thread
- Threads compartilham dados e informações.
- Threads compartilha regiões de instruções, globais e de heap. No entanto, ele tem seu registrador e pilha.
- O gerenciamento de threads consome muito poucas ou nenhuma chamada de sistema devido à comunicação entre threads que pode ser obtida usando memória compartilhada.
- É criado rapidamente, e termina mais rápido! Tornando barato sua criação.

Sabemos o que são threads, sabemos o que são processos. Entendemos que um processo pode ocupar vários núcleos permitindo 
Multithreading, E cada processo tem sua vez de rodar. 


Um thread é barato para criar e termina mais rápidamente que um processo! 



Tenho que lembrar que isso é uma pincelada sobre o assunto. Existe muito mais coisas envolvidas das quais não coloquei aqui! 



Fontes: 
https://www.programacaoprogressiva.net/2014/09/Como-os-Processos-Sao-Executados-em-um-Computador.html

https://dev.to/nfo94/o-que-e-um-processo-em-um-sistema-operacional-2769

https://www.inf.ufpr.br/wagner/so/processos+threads.2pp.pdf

https://sites.google.com/site/proffernandosiqueiraso/aulas/5-processo

https://www.guru99.com/difference-between-multiprocessing-and-multithreading.html

https://acervolima.com/diferenca-entre-processo-e-thread/

https://acervolima.com/diferenca-entre-processo-processo-pai-e-processo-filho/

https://stackoverflow.com/questions/16116952/can-multithreading-be-implemented-on-a-single-processor-system

https://acervolima.com/diferenca-entre-processo-processo-pai-e-processo-filho/

https://www.inf.ufpr.br/wagner/so/processos+threads.4pp.pdf

https://www.youtube.com/watch?v=Dhf-DYO1K78

https://alldifferences.net/difference-between-process-and-thread/