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
  2. E o I/O?

Latência de CPU vs Latência de I/O

PreviousE o I/O?NextChamadas bloqueantes

Last updated 5 months ago

Há uma diferença na ordem de grandeza entre diferentes dispositivos de hardware. Os ciclos de CPU tendem a ser os mais rápidos, enquanto que operações em I/O tendem a ser mais lentas. Claro que no final tudo depende do tipo de hardware e fabricante, mas no geral podemos aplicar a seguinte hierarquia nesta ordem de grandeza (apenas exemplo, não se apegue tanto aos números):

Numa escala relativa, o acesso à memória RAM é 300x mais lento que o ciclo da CPU, ao SSD é 300 mil vezes mais lento e ao HDD é 33 milhões de vezes mais lento. Então a pergunta que fica é: o que a CPU faz enquanto espera o I/O?

Ou melhor: o que o programa faz enquanto espera I/O?

É aqui que o I/O começa a ditar o ritmo da música. Dependendo de como o programa interage com I/O, ele pode:

a) bloquear esperando I/O responder, ou

b) ser super esperto e dizer pro sistema operacional "hey me avisa quando você tiver pronto o que te pedi no I/O, ok?"