Corrotinas e código assíncrono em PHP usando Generators \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 08 Horas 

 27 Min 

 25 Seg 

   Tempo restante da oferta: 08 27 25 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Corrotinas e código assíncrono em PHP usando Generators  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Corrotinas e código assíncrono em PHP usando Generators

 Veja como generators podem ser utilizados para criar um simples scheduler e trabalhar com corrotinas no PHP.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/06185133/corrotina-codigo-php.png)  

Nos últimos artigos eu tenho escrito sobre programação assíncrona em PHP com [ReactPHP](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp/) e [Swoole](https://www.treinaweb.com.br/blog/introducao-ao-swoole-framework-php-assincrono-baseado-em-corrotinas/). O Swoole tem seu mecanismo interno próprio de corrotinas, mas o que muita gente não sabe é que podemos trabalhar com corrotinas usando PHP puro, através de generators.

[  ![PHP - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/php-fundamentos)

Eu achei que fosse interessante escrever sobre isso até mesmo como uma forma de apresentar às pessoas o conceito de generators e também como uma forma de instigá-las a buscar mais sobre o tema.

A ideia desse artigo é construir um simples (muito simples) scheduler de corrotinas bem primitivo e didático. Em outros artigos eu escrevi de forma mais abrangente sobre generators, código síncrono, assíncrono, corrotinas etc, conceitos esses que serão importantes você ter para entender o funcionamento do nosso exemplo aqui. Por esse motivo, eu recomendo que você leia esses artigos:

- [Concorrência, Paralelismo, Processos, Threads, programação síncrona e assíncrona](https://www.treinaweb.com.br/blog/concorrencia-paralelismo-processos-threads-programacao-sincrona-e-assincrona/): Concorrência, paralelismo, processos, threads, programação síncrona e assíncrona, são assuntos que permeiam o dia a dia dos desenvolvedores. A ideia desse artigo é descomplicar um pouco o que esses conceitos significam e como eles se relacionam.
- [Introdução à programação assíncrona em PHP usando o ReactPHP](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp/): esse artigo vai introduzir todo o essencial sobre programação síncrona e assíncrona;
- [Introdução ao Swoole, framework PHP assíncrono baseado em corrotinas](https://www.treinaweb.com.br/blog/introducao-ao-swoole-framework-php-assincrono-baseado-em-corrotinas/): esse artigo também vai falar sobre desenvolvimento assíncrono e também introduzirá alguns conceitos importantes como o de corrotina.

Opcionalmente, se você tiver interesse, também recomendo a leitura deste artigo:

- [Trabalhando com corrotinas, canais e explorando um pouco mais o scheduler de corrotinas do Swoole:](https://www.treinaweb.com.br/blog/trabalhando-com-corrotinas-canais-e-explorando-um-pouco-mais-o-scheduler-de-corrotinas-do-swoole/) artigo que vai apresentar muita teoria importante sobre corrotinas e scheduler de corrotinas.

Esse artigo que você está lendo é, de certa forma, uma ramificação deste:

- [Generators no PHP](https://www.treinaweb.com.br/blog/generators-no-php/)

Portanto, o artigo [Generators no PHP](https://www.treinaweb.com.br/blog/generators-no-php/) é realmente uma leitura necessária para entender os códigos que desenvolveremos aqui.

[  ![PHP - Orientação a Objetos - Parte 1](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP - Orientação a Objetos - Parte 1 Conhecer o curso ](https://www.treinaweb.com.br/curso/php-orientacao-a-objetos-parte-1)

**Gênesis**

Sabemos que generators são como se fossem funções que podem ser interrompidas e resumidas a qualquer momento. Também sabemos que assincronismo é sobre fluxo de execução. Captando essas duas ideias centrais, podemos chegar na seguinte conclusão lógica: se um generator pode ser interrompido para que outro seja executado, eu posso usar isso para manipular o fluxo de uma execução e então atingir uma modelagem de código assíncrono.

Primeiro vamos ver um exemplo de código síncrono:

```php
