Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programação Assíncrona em PHP: por onde começar?

Programação Assíncrona em PHP: por onde começar?

Apresentação realizada em Outubro de 2021, em evento interno da IXCSoft, Chapecó - SC, Brasil.

Marcos Marcolin

October 19, 2021
Tweet

More Decks by Marcos Marcolin

Other Decks in Programming

Transcript

  1. O que vamos ver • PHP • Síncrono x Assíncrono

    • Bibliotecas / Extensões • Exemplos
  2. PHP A maioria das aplicações em PHP são construídas da

    forma tradicional, ou seja, síncrona. No qual o funcionamento é baseado em request e response, resumidamente o cliente faz uma requisição, o servidor faz o redirecionamento, o código é interpretado, compilado e os dados são retornados para o cliente.
  3. PHP Síncrono Neste modelo, as instruções são executadas de forma

    sequencial, sempre esperando uma acabar para iniciar outra.
  4. Então... • O ciclo de vida do código é durante

    o processo de request e response. • O processo em execução não tem conhecimento sobre outros processos.
  5. Caso de uso Imagine a seguinte situação, nosso cliente precisa

    consultar o financeiro do contrato de 50.000 clientes para saber se vai bloquear ou não, já pensou como funcionaria no modelo síncrono?
  6. Então... • Isso é chamado de processo bloqueante, ou seja,

    obrigatoriamente precisa acabar uma etapa para iniciar outra. • É funcional, mas pode ser melhorado. • É aí que entra a programação assíncrona.
  7. Analogia simples • Comunicação síncrona é como uma conversa por

    rádio. ◦ Apenas uma pessoa fala por vez. • Comunicação assíncrona é como uma ligação telefônica. ◦ Várias pessoas falam e escutam ao mesmo tempo.
  8. Assincronismo • Lida com tempo. • Não garante ordem de

    execução. • Dá a sensação de várias coisas executando ao mesmo tempo. • Várias coisas são feitas de forma concorrente, só que uma coisa por vez, nunca ao mesmo instante. • Também pode funcionar de forma paralela(casos específicos).
  9. Paralelismo • Várias execuções ao mesmo tempo, ou seja, paralelas.

    • Depende da quantidade de cores do processador. • Distribuição de processamento.
  10. Quando devo utilizar? • Quando as tarefas são independentes, não

    dependem uma da outra. ◦ Aplicação de realtime. ◦ Chats. ◦ Data streaming. ◦ APIS. ◦ Etc.
  11. Quando devo utilizar? • É possível utilizar assincronismo juntamente com

    o modelo clássico, quando alguma funcionalidade não precisa depender de outra, ganhando assim em performance. • Porém é comum ver aplicações assíncronas que rodam em CLI.
  12. PHP Assíncrono Diferente de outras linguagens, como Javascript, NodeJS, Golang,

    C#... o PHP não investia em recursos assíncronos nativamente, até a versão 8.1, quando incluiu o Fibers. Por isso surgiram bibliotecas e extensões para dar conta do recado.
  13. Bibliotecas / Extensões • ReactPHP -> ReactPHP: Event-driven, non-blocking I/O

    with PHP - ReactPHP • Workerman -> workerman 高性能PHP Socket即时通讯框架 • PHPSocketIO -> walkor/phpsocket.io: A server side alternative implementation of socket.io in PHP based on workerman. • Ratchet -> Ratchet - PHP WebSockets • Amp -> Amp - Asynchronous concurrency made simple ⋅ amphp • Swoole -> Open Source PHP extension for Fibers Coroutines Async IO | Swoole PHP • Entre outras diversas.
  14. Funcionalidades Em sua maioria, implementam: • Events driven. • Promises.

    • Coroutines. • Websocket. • Streams • Entre outras.