Criando Threads
Vamos ao modelo de concorrência mais fundamental: threads do SO como unidade de concorrência, memória compartilhada como comunicação, locks como sincronização.
Threads são um construto do sistema operacional: vivem no kernel-space. Mas para usá-las, a linguagem de programação precisa oferecer um tipo que represente essas threads no user-space. Cada linguagem faz isso de um jeito: C expõe a API POSIX direto, C++ embrulha em classes com semântica de ownership, Java e Kotlin usam objetos gerenciados pelo garbage collector, e Python carrega junto uma restrição peculiar (o GIL) que muda o que threads conseguem fazer na prática.
Nos próximos sub-capítulos, vamos criar threads em cada uma dessas linguagens.