Myslel jsem: vlákna a IO... vždyť to má být soft real time... 
Ajo

U Erlangu jsou to čtyři koncepty: 1. leightweight procesy (uvnitř VM, s vlastním user-space plánovačem) 2. žádný sdílený stav mezi nimi (kromě databáze) 3. striktně imutabilní struktury 4. komunikace mezi procesy je striktně asynchronní (pokud chci synchronní, zařídím si to protokolem nad tím)
Teprve tohle všechno dohromady dělá to, že je obsluha událostí v Erlangu taková pohoda. Nemusíš totiž řešit žádné zámky, nemusíš řešit, jaká data můžeš předat komu atd. Obvykle můžeš klidně pro vyřízení každého requestu spustit samostatný proces, v něm si všechno pořešíš v klidu synchronně, aniž by tě jiný vlákna jakkoli rušily, a výsledek pošleš kamkoli (klidně na víc míst) formou imutabilních dat. Díky těmhle vlastnostem může být i daleko jednodušší GC - nemůžou tam z principu vzniknout kruhové odkazy a spousta dat je jenom na stacku procesu, který se se skončením procesu prostě zahodí, GC se moc nemusí šťourat někde uvnitř a řešit nějaké složitosti.
Mapování interních procesů na vlákna OS se pak dělá stejně jako v jakémkoli jiném moderním runtimu - spustí se tolik vláken, kolik je (virtuálních) jader a procesy se na ně mapují podle toho, kdo má zrovna čas. Žádná velká věda

Z pohledu programátora tak vznikne plně konkurentní systém se slušnou latencí (sice probabilistickou, ale slušnou).