Files
Leonardo Lara Rodrigues 17d859faaf sync line numbers with en rev
2026-01-23 09:16:58 -03:00

163 lines
7.6 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: bf92d8bd839301de7c837d20ab1dac6c14f83bbf Maintainer: fernandowobeto Status: ready --><!-- CREDITS: fernandowobeto -->
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="book.pthreads">
<?phpdoc extension-membership="pecl" ?>
<title>pthreads</title>
<titleabbrev>pthreads</titleabbrev>
<preface xml:id="intro.pthreads">
&reftitle.intro;
<simpara>
pthreads é uma API orientada a objetos que fornece todas as ferramentas necessárias
para multithreading em PHP. Aplicações PHP podem criar, ler, escrever,
executar e sincronizar com Threads, Workers e objetos Threaded.
</simpara>
<warning>
<simpara>
Esta extensão é considerada sem manutenção e inoperante.
</simpara>
</warning>
<tip>
<simpara>
Considere usar <link linkend="book.parallel">parallel</link> no lugar.
</simpara>
</tip>
<warning>
<simpara>
A extensão pthreads não pode ser usada em um ambiente de servidor web.
Threading em PHP é, portanto, restrito apenas a aplicações baseadas em CLI.
</simpara>
</warning>
<warning>
<simpara>
pthreads (v3) só pode ser usado com PHP 7.2+: Isso ocorre porque o modo ZTS
não é seguro em 7.0 e 7.1.
</simpara>
</warning>
<simpara>
A classe <classname>Threaded</classname> forma a base da
funcionalidade que permite a operação dos pthreads. Expõe métodos de sincronização
e algumas interfaces úteis para o programador.
</simpara>
<simpara>
A classe <classname>Thread</classname> permite que threads sejam criadas
simplesmente estendendo-as e implementando um método <literal>run</literal>. Quaisquer
membros podem ser gravados e lidos por qualquer contexto com uma referência ao
thread. Qualquer contexto também pode executar qualquer método público e protegido.
O corpo do método run será executado em um thread separado quando o
método <methodname>Thread::start</methodname> da implementação for
chamado a partir do contexto que o criou. Somente o contexto que cria um
thread pode iniciar e ingressar nele.
</simpara>
<simpara>
A classe <classname>Worker</classname> tem um estado persistente e estará
disponível a partir da chamada para <methodname>Thread::start</methodname> (um
método herdado) até que o objeto saia do escopo ou seja explicitamente
desligamento (via <methodname>Worker::shutdown</methodname>). Qualquer contexto com uma
referência ao objeto worker pode empilhar tarefas no Worker (via
<methodname>Worker::stack</methodname>), onde essas tarefas serão executadas
pelo worker em um thread separado. O método <literal>run</literal> de um
objeto worker será executado antes de qualquer objeto na pilha do worker,
permitindo a inicialização de recursos que os objetos a serem executados possam
necessitar.
</simpara>
<simpara>
A classe <classname>Pool</classname> é usada para criar um grupo de workers
para distribuir objetos <classname>Threaded</classname> entre eles. É a
maneira mais fácil e eficiente de usar vários threads em
aplicações PHP.
</simpara>
<caution>
<simpara>
A classe <classname>Pool</classname> não estende a classe
<classname>Threaded</classname> e, portanto, objetos baseados em pool são
considerados objetos PHP normais. Como tal, as suas instâncias não devem ser
partilhadas entre diferentes contextos.
</simpara>
</caution>
<simpara>
A classe <classname>Volatile</classname> é nova no pthreads v3. É usado
para denotar propriedades <classname>Threaded</classname> mutáveis de classes
<classname>Threaded</classname> (uma vez que agora são imutáveis por
padrão). Também é usado para armazenar arrays PHP em
contextos <classname>Threaded</classname>.
</simpara>
<simpara>
A sincronização é uma habilidade importante durante o threading. Todos os objetos
que o pthreads cria possuem sincronização integrada na forma (que será
familiar aos programadores java) de
<methodname>Threaded::wait</methodname> e
<methodname>Threaded::notify</methodname>. Chamar
<methodname>Threaded::wait</methodname> em um objeto fará com que o contexto
espere por outro contexto para chamar
<methodname>Threaded::notify</methodname> no mesmo objeto. Este mecanismo
permite uma sincronização poderosa entre objetos <classname>Threaded</classname>
em PHP.
</simpara>
<caution>
<simpara>
Quaisquer objetos destinados ao uso nas partes multithread de sua
aplicação devem estender <classname>Threaded</classname>.
</simpara>
</caution>
<simpara>
Armazenamento de dados:
Como regra geral, qualquer tipo de dados que possa ser serializado pode ser usado como membro de um objeto Threaded, ele pode ser lido e escrito a partir de qualquer contexto com uma referência ao objeto Threaded.
Nem todo tipo de dados é armazenado em série; os tipos básicos são armazenados em sua forma verdadeira.
Tipos complexos, arrays e objetos que não são encadeados são armazenados serialmente; eles podem ser lidos e gravados no Threaded Object a partir de qualquer contexto com uma referência.
Com exceção dos Objetos Threaded, qualquer referência usada para definir um membro de um Objeto Threaded é separada da referência no Objeto Threaded;
os mesmos dados podem ser lidos diretamente do Objeto Threaded a qualquer momento por qualquer contexto com uma referência ao Objeto Threaded.
</simpara>
<simpara>
Membros Estáticos:
Quando um novo contexto é criado (Thread ou Worker), geralmente eles são copiados, mas recursos e objetos com estado interno são anulados (por questões de segurança). Isso permite que eles funcionem como uma espécie de armazenamento local de threads. Por exemplo, ao iniciar o contexto, uma classe cujos membros estáticos incluem informações de conexão para um servidor de banco de dados, e a própria conexão, terá apenas as informações de conexão simples copiadas, não a conexão. Permitir que o novo contexto inicie uma conexão da mesma forma que o contexto que a criou, armazenando a conexão no mesmo local sem afetar o contexto original.
</simpara>
<caution>
<simpara>
Quando print_r, var_dump e outras funções de depuração de objetos são executadas, elas não incluem proteção recursiva.
</simpara>
</caution>
<note>
<simpara>
Recursos:
As extensões e funcionalidades que definem recursos em PHP são completamente despreparadas para este tipo de ambiente; O pthreads prevê que os recursos sejam compartilhados entre contextos; no entanto, para a maioria dos tipos de recursos, isso deve ser considerado inseguro. Deve-se ter extrema cautela e cuidado ao compartilhar recursos entre contextos.
</simpara>
</note>
<caution>
<simpara>
No ambiente em que o pthreads é executado, algumas restrições e limitações são necessárias para fornecer um ambiente estável.
</simpara>
</caution>
</preface>
&reference.pthreads.setup;
&reference.pthreads.constants;
&reference.pthreads.threaded;
&reference.pthreads.thread;
&reference.pthreads.worker;
&reference.pthreads.collectable;
&reference.pthreads.pool;
&reference.pthreads.volatile;
</book>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->