PHP Assíncrono com Swoole

PHP Assíncrono com Swoole

O que é e formas de implementar concorrência e paralelismo no PHP com o auxílio da extensão Swoole, multi-threading e Corotinas.

47c092e185020f83fcb35e3ed998ca0e?s=128

Leo Cavalcante

September 12, 2020
Tweet

Transcript

  1. PHP ASSÍNCRONO COM SWOOLE

  2. ASSÍNCRONO do grego ασύγχρονη (asýnchroni) …no latim, asynchronous …no francês,

    asynchrone …no espanhol, asincrónico
  3. [assíncrono] ADJETIVO 1. que não é sincrônico, que não apresenta

    sincronia ou sincronismo; assincrônico 2. que gira com uma velocidade diferente da do sincronismo, sem uma relação constante entre a frequência da força eletromotriz e a velocidade (diz-se do motor elétrico de indução, alimentado por corrente alternada) 3. que não é controlado por dispositivo temporizador; que não mantém sincronia
  4. ⊙ ETIMa- 'negação, privação' + síncrono

  5. SÍNCRONO [síncrono] 1.que acontece simultaneamente 2.relativo a fatos coincidentes ou

    coexistentes 3.que tem o seu tempo de duração determinado por um mecanismo de sincronismo 4.que ocorre simultaneamente ou em intervalos regulares, controlados por um dispositivo temporizador; que mantém sincronia ⊙ ETIMgr.súgkhronos,os,on 'contemporâneo', pelo lat.tar.synchronus 'id.'
  6. CONCORRÊNCIA & PARALELISMO

  7. THREADS & PROCESSOS

  8. None
  9. E ATENÇÃO! SE LIGA AÍ, QUE É HORA DA ANALOGIA.

  10. None
  11. 1.Receber cliente 2.Levar até uma mesa livre ou reservada 3.Anotar

    pedido 4.Solicitar o prato pra cozinha 5.Levar o prato pronto da cozinha até o cliente JORNADA
  12. 1.Receber cliente 2.Levar até uma mesa livre ou reservada 3.Esperar

    o cliente escolher 4.Anotar pedido 5.Solicitar o prato pra cozinha 6.Esperar a cozinha fazer o prato 7.Levar o prato pronto da cozinha até o cliente GARÇOM SÍNCRONO
  13. None
  14. 1.Receber cliente 2.Levar até uma mesa livre ou reservada 3.Já

    vai atender outro cliente 4.Anotar pedido 5.Solicitar o prato pra cozinha 6.Atender um novo cliente ou levar um prato pronto 7.Levar o prato pronto da cozinha até o cliente GARÇOM ASSÍNCRONO
  15. GARÇOM “PARALELO”

  16. SÍNCRONO CONCORRENTE PARALELO

  17. None
  18. None
  19. THREADS & PROCESSOS

  20. None
  21. THREADS

  22. PROCESSOS

  23. None
  24. WORLD WIDE WEB

  25. WORLD WIDE WEB

  26. None
  27. WORLD WIDE WEB

  28. C10K

  29. C10K 2010 – 2M WhatsApp, 24 cores, com Erlang (que

    inspirou a Swoole) 1999 Dan Kegel http://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf
  30. It's time for web servers to handle ten thousand clients

    simultaneously, don't you think? After all, the web is a big place now. - Dan Kegel http://www.kegel.com/c10k.html
  31. None
  32. EM 2002 IGOR SYSOEV BATEU NO PEITO

  33. WEB É I/O

  34. #UNIX SOCKETS #SOCKETS TCP&UDP #LER E SALVAR ARQUIVOS #PIPES #DISPOSITIVOS

  35. FILE DESCRIPTORS

  36. select() poll() NON-BLOCKING I/O

  37. I/O MULTIPLEXING epoll (Linux) O(1) IOCP (Windows) kqueue (Mac/FreeBSD)

  38. None
  39. None
  40. REACTOR PATTERN

  41. 2009/2010

  42. 2009/2010 韩天峰-Rango (Tianfeng Han @matyhtf)

  43. None
  44. Coroutine based Async PHP programming framework Build high-performance, scalable, concurrent

    TCP, UDP, Unix Socket, HTTP, WebSocket services with PHP and fluent Coroutine API.
  45. SWORD

  46. • 2012 open-source no GitHub (https://github.com/swoole/swoole-src) • 2013 Swoole v1

    • 2016 v2 com Corotinas • 2017 Refactoring • 2018 v4 com libco da Tencent (https://github.com/Tencent/libco). Tencent: • QQ • WeChat • Epic • Miniclip • Riot (League of Legends e Valorant)
  47. None
  48. https://medium.com/@victorgazotti/how-did-we- increased-our-php-app-performance-by-80-with- laravel-and-swoole-6b53d1092cab

  49. Compared with other async programming frameworks or softwares such as

    Nginx, Tornado, Node.js, Swoole has the built-in PHP coroutine and async support, multiple threads I/O modules. Developers can use sync or async, coroutine API to write the applications or create thousands of light weight coroutines within one PHP process. - https://www.swoole.co.uk/
  50. None
  51. None
  52. None
  53. None
  54. M:N THREADING

  55. GREEN THREADS

  56. None
  57. COROTINAS

  58. None
  59. None
  60. None
  61. pecl install swoole

  62. WSL Windows Subsystem for Linux

  63. None
  64. None
  65. None
  66. None
  67. None
  68. Swoole\Runtime::enableCoroutine();

  69. None
  70. COMMUNICATING SEQUENTIAL PROCESSES

  71. SIR TONY HOARE

  72. MESSAGE PASSING

  73. CHANNEL

  74. None
  75. #WAITGROUP #BARRIER #BATCH #PARALLEL

  76. ASYNC & AWAIT

  77. github.com/leocavalcante/swoole-futures

  78. None
  79. None
  80. PREEMPTIVE SCHEDULER

  81. None
  82. Swoole\Runtime::enableScheduler(); ini_set("swoole.enable_preemptive_scheduler", "1");

  83. 2019 Swoole 4.4 2020 Go 1.14 20?? Kotlin ?

  84. None
  85. github.com/swooletw/awesome-swoole

  86. github.com/leocavalcante/siler

  87. @marcelgsantos @KennedyTedesco @doubaokun + SWOOLE + ASYNC @deminy @AkitaOnRails Programação

    para Iniciantes Concorrência e Paralelismo | Entendendo Back-End
  88. loop-run.io 2021 (data ainda não confirmada) - Barcelona

  89. @leocavalcante[e[e]]

  90. MUITO OBRIGADO joind.in/event/php-community-summit-2020