1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-24 07:22:16 +01:00
Files

176 lines
7.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: bf92d8bd839301de7c837d20ab1dac6c14f83bbf Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: no -->
<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 es una API orientada a objetos que aporta todas las herramientas necesarias para
el multithreading en PHP.
Las aplicaciones PHP pueden crear, leer, escribir, ejecutar
y sincronizar Threads, Workers, y objetos Threaded.
</simpara>
<warning>
<simpara>
Esta extensión es considerada no mantenida y obsoleta.
</simpara>
</warning>
<tip>
<simpara>
Considerar el uso de <link linkend="book.parallel">parallel</link> en su lugar.
</simpara>
</tip>
<warning>
<simpara>
La extensión pthreads no puede ser utilizada en un entorno de
servidor Web. El threading en PHP se limita por tanto a aplicaciones basadas
en CLI únicamente.
</simpara>
</warning>
<warning>
<simpara>
pthreads (v3) puede ser utilizado únicamente con PHP 7.2+ debido a un
modo ZTS peligroso en PHP 7.0 y 7.1.
</simpara>
</warning>
<simpara>
La clase <classname>Threaded</classname> constituye la base de la
funcionalidad que permite a pthreads funcionar. Expone los métodos
de sincronización y algunas interfaces útiles para el programador.
</simpara>
<simpara>
La clase <classname>Thread</classname> permite crear threads extendiéndola simplemente e
implementando un método <literal>run</literal>. Todos los miembros pueden ser escritos y leídos
por cualquier contexto con una referencia al thread. Todo contexto puede igualmente ejecutar
todos los métodos públicos y protegidos. El cuerpo del método run será ejecutado
en un thread separado cuando el método <methodname>Thread::start</methodname>
de la implementación sea llamado desde el contexto que lo creó. Solo el
contexto que crea un thread puede iniciarlo y unirse a él.
</simpara>
<simpara>
La clase <classname>Worker</classname> tiene un estado persistente y estará
disponible desde la llamada a <methodname>Thread::start</methodname> (un método heredado)
hasta que el objeto esté fuera de alcance, o sea explícitamente detenido (vía
<methodname>Worker::shutdown</methodname>). Todo contexto con una referencia al objeto Worker
puede apilar tareas en el Worker (vía <methodname>Worker::stack</methodname>), donde estas
tareas serán ejecutadas por el Worker en un thread separado. El método
<literal>run</literal> de un objeto worker es ejecutado antes de cualquier objeto de la pila del worker,
lo que permite que los recursos sean inicializados para que los objetos a ejecutar puedan usarlos.
</simpara>
<simpara>
La clase <classname>Pool</classname> se utiliza para crear un grupo de
workers para distribuir objetos <classname>Threaded</classname> entre ellos.
Es el medio más fácil y eficiente de utilizar múltiples threads en aplicaciones PHP.
</simpara>
<caution>
<simpara>
La clase <classname>Pool</classname> no extiende la clase
<classname>Threaded</classname>, y por tanto los objetos basados en pool son
considerados como objetos PHP normales. En consecuencia, sus instancias no
deben ser compartidas entre contextos diferentes.
</simpara>
</caution>
<simpara>
La clase <classname>Volatile</classname> es nueva para pthreads v3.
Se utiliza para designar las propiedades <classname>Threaded</classname> mutables
de las clases <classname>Threaded</classname> (ya que estas son ahora inmutables por defecto).
También se utiliza para almacenar arrays PHP en contextos <classname>Threaded</classname>.
</simpara>
<simpara>
La sincronización es una capacidad importante al realizar threading. Todos los
objetos creados por pthreads han sido construidos con sincronización en la forma
(que será familiar a los programadores Java) de
<methodname>Threaded::wait</methodname> y
<methodname>Threaded::notify</methodname>. La llamada a
<methodname>Threaded::wait</methodname> sobre un objeto hará que el contexto
espere a que otro contexto llame a
<methodname>Threaded::notify</methodname> sobre el mismo objeto. Este mecanismo
permite una sincronización poderosa entre los objetos
<classname>Threaded</classname> en PHP.
</simpara>
<caution>
<simpara>
Todo objeto previsto para ser utilizado en una parte multithread de la aplicación
debe extender <classname>Threaded</classname>.
</simpara>
</caution>
<simpara>
Almacenamiento de datos: En regla general, todos los tipos de datos que puedan ser serializados pueden
ser utilizados como miembro de un objeto Threaded, pueden ser leídos y escritos desde cualquier
contexto con una referencia al objeto Threaded. No todos los tipos de datos son almacenados
después de la serialización; los tipos simples son almacenados en su forma inicial. Los tipos
complejos, los arrays y los objetos que no son Threaded, son almacenados serializados; pueden ser
leídos y escritos en el objeto Threaded desde cualquier contexto con una referencia.
A excepción de los objetos Threaded, toda referencia utilizada para definir un miembro de un objeto
Threaded es separada de la referencia en el objeto Threaded; los mismos datos pueden ser leídos
directamente desde el objeto Threaded en cualquier momento por cualquier contexto con una referencia
al objeto Threaded.
</simpara>
<simpara>
Miembros estáticos: Cuando un nuevo contexto es creado (Thread o Worker),
generalmente son copiados, pero los recursos y objetos con estado interno son nullificados
(por razones de seguridad). Esto permite a la función una especie de almacenamiento local
a nivel de thread. Por ejemplo, al iniciar el contexto, una clase cuyos miembros estáticos
incluyen información de conexión a un servidor de base de datos, solo la información
será copiada, y no la conexión en sí. Esto permite al nuevo contexto inicializar
una conexión de la misma forma que el contexto que lo creó, almacenando la conexión
en el mismo lugar sin afectar al contexto original.
</simpara>
<caution>
<simpara>
Cuando print_r, var_dump y otras funciones de depuración son ejecutadas, no incluyen
protección contra la recursión.
</simpara>
</caution>
<note>
<simpara>
Recursos: Las extensiones y funcionalidades que definen recursos en PHP no están preparadas
para este tipo de entorno; pthreads toma disposiciones en materia de recursos a compartir entre
los contextos, sin embargo, para la mayoría de los recursos, deberán ser considerados como peligrosos.
Un cuidado y una extrema precaución deberán ser de aplicación para compartir recursos entre los contextos.
</simpara>
</note>
<caution>
<simpara>
En el entorno de ejecución de pthreads, restricciones y limitaciones son necesarias para
proporcionar un entorno estable.
</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
-->