O que é um computador?
A máquina por trás do seu código
Toda vez que você digita ruby app.rb e aperta Enter, algo extraordinário acontece. Seu código Ruby (legível por humanos) vira sinais elétricos que alternam bilhões de vezes por segundo dentro de chips de silício. Mas o que está fazendo todo esse trabalho?
Um computador, no fundo, são apenas três sistemas trabalhando juntos:
- CPU (Unidade Central de Processamento): o cérebro que processa instruções
- RAM (Memória de Acesso Aleatório): o espaço de trabalho rápido e temporário
- Armazenamento (Disco): o armário permanente de arquivos
Tudo que seu computador faz (desde rodar um servidor Rails até exibir um vídeo de gatinho) é apenas esses três componentes passando dados entre si.
A analogia da cozinha
Imagine uma cozinha profissional:
- O Chef é a CPU: o único que faz coisas (corta, cozinha, emprata)
- A Bancada é a RAM: tudo que o chef está usando no momento fica aqui: ingredientes, tigelas, tábuas. E rápido de acessar mas limitado em espaço
- A Despensa é o Disco: capacidade enorme de armazenamento, mas o chef precisa caminhar até lá e voltar toda vez que precisa de um ingrediente novo. Lento, porém permanente
flowchart LR
CPU["CPU (chef)<br/>rápida · processa"] <--> RAM["RAM (bancada)<br/>média · temporária"]
RAM <--> DISK["Disco (despensa)<br/>lento · permanente"]
O chef (CPU) nunca vai direto na despensa (Disco). Ele sempre coloca os ingredientes na bancada (RAM) primeiro, trabalha com eles ali, e só guarda os pratos prontos na despensa quando termina.
O que acontece quando você roda ruby hello.rb?
Vamos rastrear o que acontece quando você executa um arquivo Ruby:
Passo 1, carregamento: O sistema operacional lê o interpretador Ruby do Disco para a RAM.
Passo 2, leitura do Arquivo: O Ruby lê hello.rb do Disco para a RAM.
Passo 3, processamento: A CPU pega o código Ruby da RAM, interpreta e executa as instruções.
Passo 4, saída: O resultado (puts "Hello, world!") viaja da RAM para sua tela.
flowchart LR
A["Disco"] -->|carga| B["RAM"] -->|executa| C["CPU"] -->|resultado| D["RAM"] -->|exibe| E["Tela"]
Todo programa que você já rodou segue esse mesmo padrão básico.
Por que um dev Rails deveria se importar?
Entender esses três componentes explica por que problemas comuns de performance acontecem:
| Problema | Causa no Hardware | Exemplo |
|---|---|---|
| Queries lentas no banco | Idas demais ao banco, que pode ler do Disco | N+1: 100 queries separadas em vez de 1 |
| Erro de falta de memória | RAM está cheia | Carregar 1 milhão de registros com User.all |
| Picos de CPU | CPU sobrecarregada | Cálculos complexos em loop sem otimização |
| Cache acelera tudo | Evita trabalho lento | Rails.cache com um memory store mantém resultados na RAM (o Solid Cache deste app os guarda no banco) |
Quando um dev senior diz "essa query está fazendo muito I/O", ele quer dizer que o código está fazendo a CPU esperar pelo Disco lento vezes demais. Quando ele diz "precisamos cachear isso", ele quer dizer: guarde o resultado num lugar rápido, muitas vezes a RAM, para o trabalho lento acontecer uma vez só.
A diferença de velocidade é absurda
A diferença de velocidade entre esses componentes não é pequena: é astronômica:
| Componente | Velocidade | Analogia |
|---|---|---|
| CPU | ~0.3 nanossegundos | Piscar o olho |
| RAM | ~100 nanossegundos | Fazer um café |
| SSD | ~100.000 nanossegundos | Tomar um banho |
| HDD | ~10.000.000 nanossegundos | Voar de SP pra Lisboa |
É por isso que seu computador tem os três: se a RAM fosse permanente, não precisaríamos de discos. Se discos fossem rápidos, não precisaríamos de RAM. Cada um existe porque o de cima é caro demais pra escalar.
Resumo
- Um computador é CPU + RAM + Armazenamento trabalhando juntos
- A CPU processa, a RAM guarda dados temporários, o Disco armazena permanentemente
- Dados sempre fluem: Disco → RAM → CPU → RAM → saída
- Muitos problemas de performance no Rails mapeiam para um desses três componentes
- A diferença de velocidade entre RAM e Disco é a principal razão pela qual cache existe
Continue com a aula 2
A CPU: o cérebro do seu computador
Explica o papel da CPU, clock speed, núcleos, o ciclo fetch-decode-execute e como o GVL limita threads Ruby.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.