concorrencia101
  • Introdução
  • First things first
  • Agradecimentos
  • Parte I - Concorrência no sistema operacional
    • O que é o programa no sistema operacional
    • Escalonador preemptivo de tarefas
    • Uma nota sobre escalonamento cooperativo
    • Propriedades de um processo
    • Clone de processo (forking)
    • Clone leve de processo (thread)
    • Todo processo tem uma thread principal
    • Uma nota sobre paralelismo
    • Principais desafios em cenário de concorrência
      • Race condition
      • Sincronização com locks
      • Modelo de atores
    • E o I/O?
      • Latência de CPU vs Latência de I/O
      • Chamadas bloqueantes
      • Chamadas não-bloqueantes
      • Assincronismo e escalonamento cooperativo
    • Vamos colocar em prática...
  • PARTE II - Concorrência em diferentes linguagens
    • Definindo ambientes de execução
    • Concorrência em C
      • Forking de processos
      • Threads
      • Race condition e sincronização de threads com mutex
      • Desafios com o uso de threads
      • Thread Pool em C
      • Green threads
      • Modelo de Atores
      • Trabalhando com I/O
    • Concorrência em Ruby
      • Forking de processos
      • Threads
      • Race condition, YARV, GVL e paralelismo em Ruby
      • Modelo de Atores
      • Trabalhando com I/O
Powered by GitBook
On this page
  1. Parte I - Concorrência no sistema operacional

Propriedades de um processo

PreviousUma nota sobre escalonamento cooperativoNextClone de processo (forking)

Last updated 5 months ago

O sistema operacional enxerga tudo como uma unidade de concorrência. Ou seja, o teu programa, que está encapsulado em um processo, é uma unidade de concorrência. Vamos relembrar as propriedades básicas de um processo UNIX-like:

  • processos têm estado privado e não compartilham memória

  • processos se comunicam uns com os outros por envio de mensagens - IPC, ou Inter-Process Communication -, que podem ser pipes, arquivos, FIFO, sockets etc (veja para entender mais sobre IPC)

  • processos têm um identificador único no sistema (PID)


Há situações em que nosso programa precisa escalar para atender uma determinada demanda, como por exemplo requisições que chegam no sistema.

Se pararmos pra refletir um pouco, uma forma de escalar seria aumentar o "número de programas" do nosso sistema, correto? Essa técnica baseia-se em replicar o mesmo processo N vezes, como se fossem clones.

Pois é, o sistema operacional fornece uma syscall chamada clone.

este meu artigo sobre UNIX pipes