Skip to content

Commit df2c060

Browse files
committed
cap19: estilo WIP
1 parent cc30b61 commit df2c060

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

online/cap19.adoc

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -576,16 +576,22 @@ por definição, uma corrotina só pode ser cancelada quando está suspensa em u
576576
A chamada `time.sleep()` bloqueia mas não faz nada. Vamos agora experimentar com uma chamada de uso intensivo da CPU, para entender melhor a GIL, bem como o efeito de funções de processamento intensivo sobre código assíncrono.((("", startref="CMhello19")))
577577

578578

579-
580-
581-
582-
=== O real impacto da GIL
583-
584-
Na((("concurrency models", "Global Interpreter Lock impact", id="CMimpact19")))((("Global Interpreter Lock (GIL)", id="gil19")))((("spinners (loading indicators)", "Global Interpreter Lock impact", id="SPgil19"))) versão com threads(<<spinner_thread_top_ex>>),
585-
você pode substituir a chamada `time.sleep(3)` na função `slow` por um requisição de cliente HTTP de sua biblioteca favorita, e a animação continuará girando.
586-
Isso acontece porque uma biblioteca de programação para rede bem desenhada liberará a GIL enquanto estiver esperando uma resposta.
587-
588-
Você também pode substituir a expressão `asyncio.sleep(3)` na corrotina `slow` para que `await` espere pela resposta de uma biblioteca bem desenhada de acesso assíncrono à rede, pois tais bibliotecas fornecem corrotinas que devolvem o controle para o loop de eventos enquanto esperam por uma resposta da rede.
579+
=== O verdadeiro impacto da GIL
580+
581+
Na((("concurrency models", "Global Interpreter Lock impact",
582+
id="CMimpact19")))((("Global Interpreter Lock (GIL)", id="gil19")))((("spinners (loading indicators)",
583+
"Global Interpreter Lock impact", id="SPgil19"))) versão
584+
com threads(<<spinner_thread_top_ex>>), você pode trocar a chamada
585+
`time.sleep(3)` na função `slow` por um requisição de cliente HTTP de sua
586+
biblioteca favorita, e a animação continuará girando. Isso acontece porque
587+
qualquer boa biblioteca de programação para rede vai liberar a GIL enquanto
588+
estiver esperando uma resposta. Por padrão, toda operação de E/S em Python
589+
libera a GIL.
590+
591+
Você também pode trocar a expressão `asyncio.sleep(3)` na corrotina `slow` para
592+
fazer `await` esperar a resposta de uma corrotina de biblioteca bem desenhada de
593+
acesso assíncrono à rede. Tais bibliotecas implementam corrotinas para devolver
594+
o controle para o loop de eventos enquanto esperam por uma resposta da rede.
589595
Enquanto isso, a animação seguirá girando.
590596

591597
Com código de uso intensivo da CPU, a história é outra.

0 commit comments

Comments
 (0)