gevent
usagreenlets
(corotinas ou,goroutines
em go) ao invés de threads do sistema operacional.- Essas operações são colaborativas, portanto elas precisam ceder (
yield
) a execução para outras rotinas. - Por serem apenas rotinas no programa, sem intervenção do sistema operacional, são mais leves.
- Essas operações são colaborativas, portanto elas precisam ceder (
- Interessante como a biblioteca em C
gevent
resolve o problema.- A biblioteca manipula a stack/heap para dar continuidade em uma rotina que deceu a execução.
libev
foi usada para manipular o loop de eventos e controlar a execução dasgreenlets
- Com monkey patching é possível tornar um código síncrono em assíncrono.
- Possível porque
gevent
troca socket bloqueante por não bloqueante. - Porém só funciona para biblioteca em python.
- Se estiver usando uma biblioteca de banco de dados em C com wrapper em python, não vai funcionar.
- Só funciona para I/O, rotinas que precisam de muita CPU não fazem muito sentido rodar com greenlets (provavelmente que threads sejam um modelo melhor).
- Possível porque
- Deve haver colaboração entre as rotinas, se uma delas não ceder a execução para que as demais continuem quando estiverem prontas, não haverá concorrência, apenas uma rotina continua.