Muito se debate sobre a possibilidade do PHP executar threads. Vamos descobrir formas simples de como rodar processos em background com total controle sobre eles.
1. PHP em background
Muito se debate sobre a possibilidade do PHP
executar threads. Vamos descobrir formas
simples de como rodar processos em
background com total controle sobre eles.
2. Motivos para usar
●Executar processos sem necessidade de interação
com usuário.
● Compartilha o mesmo espaço de memória.
Exemplos de uso:
● Processamento de grandes arquivos em
background
● Processos que necessitam ficar consumindo um
webservice
●Robôs para coleta de dados em sites
3. PHP – Process Control Extensions
● Eio Manual do PHP:
extensões para controle de processo
● Expect
● Libevent
● PCNTL
● POSIX
● Program Execution
● pthreads
● Shared Memory
● Semaphore
OBS: para utilizar pthreads é preciso recompilar o php com:
--enable-maintainer-zts
OBS²: pthreads só funcionam no PHP >= 5.3
4. IPC - Inter-Process Communication
comunicação entre os processos
Possibilidade de troca de informações entre processos de
maneira assíncrona.
Algumas formas de implementação de IPC:
● Arquivos em disco
● Banco de dados
● Memória compartilhada
● Socket / SOAP
5. Comunicação entre processos
Semaphore
● Acesso a área de partilha de dadospor outras
linguagens/programas (como Perl, C, …)
● Variáveis globais de
Manual do PHP: Semaphore
troca de dados.
Conselho: Não use drogas, aposente a Janela
seja livre! Evite dores de cabeça.
8. Processo em background
● Linux
php process.php &
● Windows
start /b “php process.php”
OBS: coloque no crontab ou no agendador de tarefas
um script para verificar, de x em x minutos, se o
processo está em execução (veremos um exemplo)
9. Iniciando processo pelo PHP
Manual do PHP:
execução de programas
● Apenas executa o script process.php
se ele já não estiver em execução
● Coloca o script process.php
em background
10. Processo eterno
3 formas diferentes:
Dica: coloque um sleep() ou um
usleep() para evitar sobrecarga
do processador
11. Mão na massa
GIT - exemplo
Agora vamos ver os
códigos em execução!
12. Links - Contato
<?php
echo "
Vitor Mattos
http://www.slideshare.net/vitormattos
https://github.com/vitormattosrj
vitor.mattos@phprio.org
";
?>
FIM
E viveram felizes para sempre!