🔗 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.
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.2Race 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.3Mutex 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.4Filó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.5Async 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.6Lei 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