async & awaitda teoria à prática
Julio Freitas
juliofreitas.net@juliomfreitas github.com/[email protected]
py3.5
Roadmap
1. Modelos de Programação Concorrente2. Solução Definida3. Suporte Teórico
“programming is thinking not typing”
paradigmas de programação concorrente
Programação Linear
Programação Linear
Uma tarefa após a outra
Ordem de execução bem definida
Programação Paralela
Programação Paralela
Máquinas/CPUs diferentes executando tarefas
Arquitetura cara como um todo
Comunicação entre as tarefas normalmente é lenta
Programação Concorrente
(threads)
Programação Concorrente (threads)
Necessário controlar a quantidade de threads, alocar threads/core
Criar uma thread é considerado caro em termos de processamento e alocação exigidos
É preciso sincronizá-las manualmente
Impossível prever a ordem de execução, definida pelo SO
Programação Concorrente
(assíncrona)
Programação Concorrente (async)
A ideia é processar outras coisas enquanto espera algum recurso estar disponível
Requisição a serviço externo
Longa query em um banco de dados
Abrir
Programação Concorrente (async)
Menos controle sobre infraestrutura de execução (pool,
threads/core…)
Aproveita-se as threads que já existem do sistema (1...n)
A ideia é que a tarefa executada abdica do controle enquanto
espera pelo seu recurso bloqueante
programação assíncrona
assyncio (py3.5)
Coroutine
Tarefa assíncrona
Define quando suspender a si mesma
EventLoop
Controlador das execuções
As corrotinas não interagem diretamente com o EventLoop
Quando uma corrotina decide se suspender, o EventLoop
coordena a próxima tarefa a executar
EventLoop
Em python, o usuário define o início e o final do loop de tarefas assíncronas
asyncio
Elegante
É como se o código fosse linear
asyncio
mais?
continuationsfutures and promises
Dúvidas?
Obrigado!<juliofreitas.net>
Top Related