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

Swoole 4: Introducing the New Coroutine Design Pattern in PHP

Swoole
March 12, 2019

Swoole 4: Introducing the New Coroutine Design Pattern in PHP

Swoole

March 12, 2019
Tweet

More Decks by Swoole

Other Decks in Technology

Transcript

  1. About Me • Staff Engineer and Technical Lead on Glu

    Mobile’s Design Home team • Playing with PHP since 2000. • Worked for a diverse group of companies in China and US, including eBay, Visa and Glu • Focus on building high performance, secure web services • Born in China, worked in U.S., live in Canada • On twitter: @deminy • On Github: https://github.com/deminy 2
  2. Agenda • What Is Swoole? • Benchmark Results • Swoole

    4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A 3
  3. Agenda • What Is Swoole? • Benchmark Results • Swoole

    4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A 4
  4. 6 • Event-driven; asynchronous I/O. • Coroutines, channels, defer, and

    more. • Connection pool. • Build high performance, concurrent HTTP, WebSocket, TCP, UDP, Unix socket services. What Is Swoole: Enrich PHP with Some Amazing Features
  5. Agenda 7 • What Is Swoole? • Benchmark Results •

    Swoole 4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A
  6. Benchmark Results: Single Query 8 Source: the TechEmpower Framework Benchmarks

    project best database-access responses per second, single query
  7. Benchmark Results: Multiple Queries 9 Source: the TechEmpower Framework Benchmarks

    project responses per second at 20 queries per request, 256 requests concurrently
  8. Benchmark Results: Why Faster? 11 Why is Swoole faster? •

    Connection pool. • Extra operations when using PDO: • Message sent to MySQL server to deallocate the prepared statement when destroying a PDOStatement object. • Message sent to MySQL server to close the MySQL connection when destroying a PDO object. • ……
  9. Agenda 12 • What Is Swoole? • Benchmark Results •

    Swoole 4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A
  10. Processes, Threads, and Coroutines 16 Multiprocessing Multithreading Coroutine Creation fork()

    pthread_create() go() Scheduling expensive cheap extremely cheap Concurrency hundreds thousands hundreds of thousands Programming difficult very difficult easy
  11. Coroutine: What’s the benefits? 19 • A coroutine can be

    paused when IO happens, and resumed after IO finishes. • PHP code still executed in sequential manner. • No new processes or threads created. Low costs on “scheduling”. • No locks needed when updating shared resources from different coroutines. • High concurrency. • Easier to use, especially when comparing to asynchronous callbacks.
  12. Blocking I/O in PHP 24 • PHP extension MySQLi, PDO:

    \Swoole\Coroutine\MySQL • PHP extension Redis: \Swoole\Coroutine\Redis • sleep(), usleep() : … • sockets and streams: … • file_get_contents(), fread(), fwrite() : … • …… • PHP extension SOAP. • PHP extension MongoDB.
  13. Swoole 4: Channels (cont.) 26 SplQueue Channels push() SplQueue>push() Always

    successful until memory exhausted. chan::push() Blocks if running out of allocated space. pop() SplQueue>pop() Throws an exception when the queue is empty. chan::pop() Blocks if no data available.
  14. Agenda 30 • What Is Swoole? • Benchmark Results •

    Swoole 4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A
  15. Top Swoole Use Cases 31 • Crawlers. • HTTP/RPC. •

    IM, online chat room. • Internet of things. • Gaming servers.
  16. Agenda 32 • What Is Swoole? • Benchmark Results •

    Swoole 4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A
  17. History of Swoole 33 • 2012-07: First Git commit. •

    2013-04: Swoole 1 released. • 2016-12: Swoole 2 released. • 2018-06: Swoole 4 released.
  18. The Future of Swoole (cont.) 34 A dedicated development team

    for the Swoole ecosystem, with more supports to the open source community: • SDLC process improvements. • Improved documentation. • Lots of refactors. • More components like ZooKeeper, Kafka, Hadoop, HBase, etcd, grpc, AMQP, MQTT, etc.
  19. Swoole 4.1 35 • 4.1.0: Added stream hook: support asynchronous

    IO on Redis, PDO, MySQLi. • 4.1.2: Added socket hook: allow building coroutine versions of PHP extensions for MongoDB, ZooKeeper and more.
  20. Agenda 39 • What Is Swoole? • Benchmark Results •

    Swoole 4: Asynchronous Programming with Coroutines • Top Swoole Use Cases • History of Swoole, and What's New in Swoole 4 • The Future of Swoole • Q & A
  21. The Future of Swoole 40 • Latest stable release: 4.3.0

    • Swoole 5.0 • Coroutines only. • Clean up legacy code.
  22. The Future of Swoole (cont.) 41 lots of changes in

    Swoole since 2018 Source: https://github.com/swoole/swoole-src/graphs/contributors
  23. Resources 42 • Sample code of this talk: https://github.com/deminy/swoole-by-examples •

    Swoole: https://github.com/swoole/swoole-src • Swoole frameworks: • https://github.com/zendframework/zend-expressive-swoole • https://github.com/easy-swoole/easyswoole • https://github.com/swoft-cloud/swoft/ • https://github.com/swooletw/awesome-swoole