Porque ferramentas como a Swoole tornam o PHP competitivo.
Leo Cavalcante
Staff Engineer e Skill Lead
Developer Experience na PicPay
Swoole e Hyperf
PHP-FIG
OpenCodeCo
5AM 5KM
Músico frustrado
Marceneiro de pandemia
TechEmpower
Rinha de Backend
PHP = Rust, Go, Java, C#, Elixir, Node.js etc
Não esperar pelo anterior
Não interromper a execução
Mais de um por vez
Concorrente
Paralelo
Não-bloqueante
Recepciona
Anota o pedido
Traz o prato
Espera a escolha do pedido
Espera a cozinha finalizar o prato
Espera…
Restaurante é o servidor
Garçom são os recursos (RAM, CPU)
Clientes são as requisições
Fazer mais de uma coisa ao mesmo
Aproveitar recursos computacionais ociosos
Produtividade e eficiência
Mais de um programa
Memória virtual
Processos
Processos
Threads
Fibers (Virtual Threads, Green Threads, Lightweight Threads)
Java Pesado (RAM)
Context switch (CPU)
I/O continua bloqueado
Syscalls
Memória compartilhada
Dead-locks, race conditions, mutexes
Apache
Pool de processos
Pool de threads
World
Wide
Web
Dan Kegel
10 mil conexões simultâneas
Eficiênte (menor quantidade de recursos)
Receber e enviar requisições HTTP
Banco de dados
Rede no geral
Igor Sysoev
Engine X
Nasceu pra resolver o C10k problem
Event-loop
Reactor
Single-threaded
File descriptors
Pipes
Sockets
select
poll
epoll
Node.js (JavaScript)
Tornado (Python)
Swoole (PHP)
Rápido
Preciso
Como uma espada (Sword)
Multi-processing
Multi-threaded
Coroutines (Fibers)
Callbacks
Promises/Futures
async/await
Rotinas (Fibers)
Que cooperam (Co)
Preemptivas (Scheduler)
use Swoole\Coroutine;
Coroutine::create(function () {
Coroutine::sleep(1.0);
echo ' ';
});
Coroutine::create(function () {
Coroutine::sleep(2.0);
echo 'World!';
});
Coroutine::create(function () {
Coroutine::sleep(0.5);
echo 'Hello,';
});
$ phpctl php hello_world.php
> Hello, World!
use Swoole\Coroutine;
Coroutine::create(function () {
Coroutine::sleep(1);
echo '1';
});
Coroutine::create(function () {
Coroutine::sleep(1);
echo '2';
});
Coroutine::create(function () {
Coroutine::sleep(1);
echo '3';
});
$ time phpctl php time.php
132
phpctl php time.php
0.02s user
0.00s system
1% cpu
1.666 total
Text