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

Introdução a Programação Assíncrona em PHP

Introdução a Programação Assíncrona em PHP

O ecossistema de PHP tem crescido imensamente nos últimos anos e diversos conceitos e ferramentas têm se consolidado. Um deles é a programação assíncrona. Nesta palestra serão abordados os conceitos de programação assíncrona, programação baseada em eventos, event-loop, streams, promises entre outros. Serão apresentados casos de usos em que podemos nos beneficiar da programação assíncrona e serão apresentadas bibliotecas e ferramentas que fornecem suporte e/ou fazem uso de programação assíncrona.

Marcel dos Santos

August 31, 2019

Transcript

109 slides
  1. Learning OOP in PHP Tutoriais, vídeos, slides, livros sobre OOP,

    OOD, design patterns, refatoração e arquitetura. bit.ly/Learning-OOP-in-PHP
  2. Interaja nas mídias sociais!
 
 - fale sobre o evento,

    palestrantes e conteúdo - tire fotos do evento e publique
 - interaja com outros participantes do evento - tire dúvidas ou dê feedbacks para os palestrantes
  3. 1. seguir @marcelgsantos no Twitter
 2. tuitar utilizando as hashtags

    #codecon19,
 #async e #reactphp
 3. não vale tuíte em branco e retuíte
 4. ler e preencher este simples formulário
 bit.ly/sorteio-codecon Concorra a um livro da Casa do Código!
  4. o servidor web recebe a requisição, delega o processamento para

    o interpretador PHP e envia a resposta para o cliente
  5. ou seja, o ciclo de vida de um código PHP

    é somente durante o processo de requisição e resposta
  6. arquitetura share-nothing
 todo estado dentro de um processo PHP tem

    vida curta e existe dentro de um único ciclo de vida
  7. modos de execução
 um programa PHP pode ser executado em

    um único processo ou em múltiplos threads
  8. o modo de execução do PHP é uma decisão de

    arquitetura, mas pode trazer algumas limitações
  9. Caso de Uso 1
 um aplicação de linha de comando

    que extrai o preço dos produtos de um e- commerce
  10. threads
 são linhas de execução dentro de um processo que

    possui acesso ao mesmo espaço de endereçamento
  11. threads
 criar um thread é algo de 10 a 100

    vezes mais rápido do que criar processos
  12. concorrência
 é quando mais de uma tarefa é executada no

    mesmo intervalo de tempo mesmo que não estejam em execução no mesmo instante
  13. !// 02 - async code setTimeout(function() { console.log('Hello everyone!'); },

    3000); console.log('Hello Codecon Joinville’); !// shows the message and after 3s shows another message
  14. !// 03 - async code $loop = React\EventLoop\Factory!::create(); $loop!->addTimer(3, function

    () { echo 'Hello everyone!'; }); echo 'Hello Codecon Joinville’ . PHP_EOL; $loop!->run(); !// shows the message and after 3s shows another message
  15. um código bloqueante é aquele que bloqueia a execução de

    uma instrução até que a instrução anterior seja finalizada
  16. o espirro é algo bloqueante, ou seja, paramos “tudo” o

    que estamos fazendo quando vamos espirrar!
  17. um código não-bloqueante é aquele que não bloqueia a execução

    de uma instrução com base em uma instrução anterior não finalizada
  18. o ser humano é multitarefa e pode andar, falar e

    comer ao mesmo tempo, ou seja, são tarefas não-bloqueantes
  19. !// 04 - create a loop
 
 $loop = React\EventLoop\Factory!::create();

    $loop!->addTimer(1, function() { echo "after timer" . PHP_EOL; }); echo "before timer" . PHP_EOL; $loop!->run();
 !// before timer !// after timer (1s after)
  20. !// 05 - blocking the loop $loop = React\EventLoop\Factory!::create(); $loop!->addTimer(1,

    function () { sleep(5); }); $loop!->addPeriodicTimer(1, function() { echo "hello" . PHP_EOL; }); $loop!->run(); !// blocked for 5s !// hello (every second)
  21. streams
 são uma forma de generalizar arquivo, rede e outras

    operações que compartilham um conjunto comum de funções e usos
  22. !// 06 - readable and writable stream $loop = React\EventLoop\Factory!::create();

    $readable = new ReadableResourceStream(STDIN, $loop); $writable = new WritableResourceStream(STDOUT, $loop); $readable!->on('data', function($chunk) use ($writable) { $writable!->write($chunk); }); $loop!->run(); !// echo 'hello world' | php streams-writable.php !// hello world
  23. 1. unfulfilled - valor inicial e desconhecido
 2. fulfilled -

    valor retornado para a promise
 3. failed - ocorreu uma exceção durante a execução estados de uma promise
  24. um objeto de deferred pode utilizar os métodos resolve() e

    reject() para mudar o estado de uma promise
  25. !// 07 - deferred and promise $deferred = new React\Promise\Deferred();

    $promise = $deferred!->promise(); $promise!->done(function($data) { echo 'Done: ' . $data . PHP_EOL; }); $deferred!->resolve('hello world'); !// Done: hello world
  26. Caso de Uso 2
 aplicação que acessa um perfil do

    SpeakerDeck, obtém os links dos slides, acessa cada um deles e extrai o título, descrição, estrelas e visualizações
  27. bit.ly/workshop-php74 Informações: será apresentado um histórico breve da linguagem, as

    principais funcionalidades do PHP 7.4 de forma prática como typed properties, arrow functions, spread operator, preloading, FFI entre outras e funcionalidades futuras do PHP 8.0.

More Decks by Marcel dos Santos

Other Decks in Programming