Trilha 09

🔗 Concorrência e paralelismo

O que acontece quando dois trechos de código rodam "ao mesmo tempo"? Esta trilha explora o modelo de threads e processos, os bugs que surgem quando compartilham memória (race conditions), os mecanismos que os previnem (mutex e semáforos), o problema clássico dos filósofos e deadlock, o modelo assíncrono com event loop, e os limites matemáticos do paralelismo pela Lei de Amdahl.

9.1

Threads e processos

O que é um processo, o que é uma thread, o que compartilham. Criação de threads em Python e C. Por que threads são mais leves que processos.

Disponível
9.2

Race conditions

counter += 1 são três operações, não uma. LOAD, ADD, STORE e como o SO pode interromper entre elas. Heisenbugs que somem com o debugger.

Disponível
9.3

Mutex e semáforos

Mutex garante exclusão mútua: só uma thread na seção crítica por vez. Semáforos generalizam para N threads. Pool de conexões, produtor/consumidor.

Disponível
9.4

Filósofos e deadlock

Cinco filósofos, cinco garfos. As 4 condições de Coffman. Espera circular. Como a ordenação de recursos quebra o deadlock sem starvation.

Disponível
9.5

Async e concorrência

Event loop, async/await e microtasks vs macrotasks. Por que Promises resolvem antes de setTimeout. Goroutines do Go e o modelo CSP com channels.

Disponível
9.6

Lei de Amdahl

Com 10% de código serial, o speedup máximo é 10× — não importa quantas CPUs. A Lei de Gustafson explica por que HPC ainda escala. Eficiência paralela.

Disponível