> For the complete documentation index, see [llms.txt](https://concorrencia101.leandronsp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://concorrencia101.leandronsp.com/first-things-first.md).

# First things first

Muito do que vou trazer ao longo deste guia é um compilado de coisas que aprendi ao longo da carreira, tanto a nível acadêmico quanto profissional. Tem muito conhecimento teórico pra compartilhar aqui, mas também muito *empirismo*.

> Pegue minha visão com a devida moderação, e fique a vontade pra discordar de alguns pontos e me chamar pra conversar sobre

**Primeira coisa**: acho confuso falar de concorrência iniciando logo por *threads*. Isto geralmente vem acompanhado de "multi-threading", "paralelismo" e também em como deixar o sistema "mais rápido". Na carona vem palavrinhas que causam boa impressão como *escalabilidade e performance*.

Vamos com calma. Existem muitas camadas anteriores que é preciso sabermos.

> "Ah mas certas coisas não vão ajudar no dia-dia, nem vão pagar meus boletos"

*Wrong*. **Vão ajudar sim**. Não estou propondo alto conhecimento acadêmico e teórico, mas reflexões que vão te ajudar a, perdoem a analogia, *apertar aquele parafuso de forma eficiente quando ninguém mais na equipe conseguir apertar.*

E atenção para quando eu digo "eficiente": eficiente é o contrário de **caro e complexo**. Por vezes a gente acaba pensando numa solução que dá uma tremenda volta sendo que era só "apertar o parafuso". Abordagens como "é só colocar mais thread que fica mais rápido" acabam penalizando e muito a performance sem antes tomar a decisão, cientes das limitações da linguagem de programação, do framework, e inclusive do próprio sistema operacional.

E é por isso que resolvi escrever este guia.

## Ok, mas de qual sistema operacional estamos falando?

Quando o assunto é sistemas operacionais, diferentes implementações podem trazer diferentes conceitos, o que pode tornar o assunto impreciso. Por este motivo, é importante estabelecermos qual sistema operacional este guia abordará, e não só: a arquitetura do computador também.

Neste guia abordaremos mais precisamente conceitos da **arquitetura x86\_64 e sistema operacional UNIX-like**, podendo ser qualquer distribuição GNU/Linux ou MacOS, por exemplo.
