Comparação entre Rust Async e threads do Linux em tempo de troca de contexto e uso de memória
(github.com)- Tempo de troca de contexto: tarefa assíncrona 0,2µs vs thread do kernel 1,7µs
→ Se a troca acontecer por causa de I/O, essa diferença de tempo desaparece (ambos 1,7µs)
→ Se a versão com threads for limitada a usar apenas um único núcleo, a vantagem do assíncrono também desaparece (ficam quase iguais)
-
Criação de nova tarefa: tarefa assíncrona ~0,3µs vs thread do kernel 17µs
-
Uso de memória: tarefa assíncrona algumas centenas de bytes vs thread do kernel 20KiB (9,5KiB usuário, 10KiB kernel)
→ Isso considera tarefas que quase não fazem nada; em operação real, será necessário mais
- É fácil criar 250 mil tarefas assíncronas, mas em um notebook com 4 núcleos/32GiB, 80 mil threads é o limite máximo
1 comentários
Um benchmark feito para mostrar que não basta dizer simplesmente que assíncrono é muito melhor em desempenho/eficiência; é preciso entender um pouco do que acontece por dentro antes de falar.
Na prática, o desenvolvimento assíncrono também tem muitos bugs e pontos mais difíceis, então é preciso ter cuidado.