O runtime
O laço de eventos, as fibras e o executor: muita espera numa thread só.
Arcane.Laco é um reator: uma thread dormindo no selectors do sistema até haver algo a fazer — um soquete pronto, um prazo vencido, uma tarefa na fila. É a forma de atender mil conexões com uma thread, em vez de mil.
adopt Arcane.Laco as L
laco := L.novo()
ordem := []
L.apos(laco, 20, lambda => ordem.append("depois"))
L.agendar(laco, lambda => ordem.append("agora"))
L.apos(laco, 40, lambda => L.parar(laco))
L.rodar(laco)
assert ordem is ["agora", "depois"]| Peça | Faz |
|---|---|
| o laço | a fila de prontas, a fila de prazos e o seletor de E/S |
| as fibras | stream action que cede o controle em cada emit |
| o canal | fibras que conversam sem trava |
| o executor | o trabalho que bloqueia vai para um pool, e o resultado volta pela fila |
Por onde seguir#
O laço de eventos
o reator, e por que ele dorme em vez de girar
O escalonador
a ordem de execução e a justiça
Fibras
stream action como corrotina — e o limite do stackless
Canais entre fibras
o chan do Go, com contrapressão de graça
Prazos e relógios
apos, a_cada e cancelar
O executor
o trabalho que bloqueia, fora do laço
Contrapressão
o teto da fila, e a falha visível
Quando algo falha
uma conexão ruim não derruba o servidor
Laço, thread, async ou processo
qual modelo para qual trabalho
O runtime: o mapa
o que existe, e o que não