<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/refs.fileprocess.process.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'book.pthreads.php',
    1 => 'pthreads',
    2 => 'pthreads',
  ),
  'up' => 
  array (
    0 => 'refs.fileprocess.process.php',
    1 => 'Extensiones de control de procesos',
  ),
  'prev' => 
  array (
    0 => 'parallel-sync.invoke.php',
    1 => 'parallel\\Sync::__invoke',
  ),
  'next' => 
  array (
    0 => 'pthreads.setup.php',
    1 => 'Instalaci&oacute;n/Configuraci&oacute;n',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/pthreads/book.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/book.pthreads.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="book.pthreads" class="book">
 
 <h1 class="title">pthreads</h1>
 

 <div id="intro.pthreads" class="preface">
  <h1 class="title">Introducción</h1>
  <p class="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.
  </p>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Esta extensión es considerada no mantenida y obsoleta.
   </p>
  </div>
  <div class="tip"><strong class="tip">Sugerencia</strong>
   <p class="simpara">
    Considerar el uso de <a href="book.parallel.php" class="link">parallel</a> en su lugar.
   </p>
  </div>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="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.
   </p>
  </div>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    pthreads (v3) puede ser utilizado únicamente con PHP 7.2+ debido a un
    modo ZTS peligroso en PHP 7.0 y 7.1.
   </p>
  </div>
  <p class="simpara">
   La clase <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span> 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.
  </p>
  <p class="simpara">
   La clase <span class="classname"><a href="class.thread.php" class="classname">Thread</a></span> permite crear threads extendiéndola simplemente e
   implementando un método <code class="literal">run</code>. 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 <span class="methodname"><a href="thread.start.php" class="methodname">Thread::start()</a></span>
   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.
  </p>
  <p class="simpara">
   La clase <span class="classname"><a href="class.worker.php" class="classname">Worker</a></span> tiene un estado persistente y estará
   disponible desde la llamada a <span class="methodname"><a href="thread.start.php" class="methodname">Thread::start()</a></span> (un método heredado)
   hasta que el objeto esté fuera de alcance, o sea explícitamente detenido (vía
   <span class="methodname"><a href="worker.shutdown.php" class="methodname">Worker::shutdown()</a></span>). Todo contexto con una referencia al objeto Worker
   puede apilar tareas en el Worker (vía <span class="methodname"><a href="worker.stack.php" class="methodname">Worker::stack()</a></span>), donde estas
   tareas serán ejecutadas por el Worker en un thread separado. El método
   <code class="literal">run</code> 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.
  </p>
  <p class="simpara">
   La clase <span class="classname"><a href="class.pool.php" class="classname">Pool</a></span> se utiliza para crear un grupo de
   workers para distribuir objetos <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span> entre ellos.
   Es el medio más fácil y eficiente de utilizar múltiples threads en aplicaciones PHP.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    La clase <span class="classname"><a href="class.pool.php" class="classname">Pool</a></span> no extiende la clase
   <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span>, 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.
   </p>
  </div>
  <p class="simpara">
   La clase <span class="classname"><a href="class.volatile.php" class="classname">Volatile</a></span> es nueva para pthreads v3.
   Se utiliza para designar las propiedades <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span> mutables
   de las clases <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span> (ya que estas son ahora inmutables por defecto).
   También se utiliza para almacenar arrays PHP en contextos <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span>.
  </p>
  <p class="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
   <span class="methodname"><a href="threaded.wait.php" class="methodname">Threaded::wait()</a></span> y
   <span class="methodname"><a href="threaded.notify.php" class="methodname">Threaded::notify()</a></span>. La llamada a
   <span class="methodname"><a href="threaded.wait.php" class="methodname">Threaded::wait()</a></span> sobre un objeto hará que el contexto
   espere a que otro contexto llame a
   <span class="methodname"><a href="threaded.notify.php" class="methodname">Threaded::notify()</a></span> sobre el mismo objeto. Este mecanismo
   permite una sincronización poderosa entre los objetos
   <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span> en PHP.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Todo objeto previsto para ser utilizado en una parte multithread de la aplicación
    debe extender <span class="classname"><a href="class.threaded.php" class="classname">Threaded</a></span>.
   </p>
  </div>
  <p class="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.
  </p>
  <p class="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.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
  <p class="simpara">
   Cuando print_r, var_dump y otras funciones de depuración son ejecutadas, no incluyen
   protección contra la recursión.
  </p>
  </div>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="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.
   </span>
  </p></blockquote>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    En el entorno de ejecución de pthreads, restricciones y limitaciones son necesarias para
    proporcionar un entorno estable.
   </p>
  </div>
 </div>

 






 






 






 






 






 






 






 






<ul class="chunklist chunklist_book"><li><a href="pthreads.setup.php">Instalaci&oacute;n/Configuraci&oacute;n</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="pthreads.requirements.php">Requerimientos</a></li><li><a href="pthreads.installation.php">Instalaci&oacute;n</a></li></ul></li><li><a href="pthreads.constants.php">Constantes predefinidas</a></li><li><a href="class.threaded.php">Threaded</a> — La clase Threaded<ul class="chunklist chunklist_book chunklist_children"><li><a href="threaded.chunk.php">Threaded::chunk</a> — Manipulaci&oacute;n</li><li><a href="threaded.count.php">Threaded::count</a> — Manipulaci&oacute;n</li><li><a href="threaded.extend.php">Threaded::extend</a> — Manipulaci&oacute;n durante la ejecuci&oacute;n</li><li><a href="thread.isrunning.php">Threaded::isRunning</a> — Detecci&oacute;n de estado</li><li><a href="threaded.isterminated.php">Threaded::isTerminated</a> — Detecci&oacute;n de estado</li><li><a href="threaded.merge.php">Threaded::merge</a> — Manipulaci&oacute;n</li><li><a href="threaded.notify.php">Threaded::notify</a> — Sincronizaci&oacute;n</li><li><a href="threaded.notifyone.php">Threaded::notifyOne</a> — Sincronizar</li><li><a href="threaded.pop.php">Threaded::pop</a> — Manipulaci&oacute;n</li><li><a href="threaded.run.php">Threaded::run</a> — Ejecuci&oacute;n</li><li><a href="threaded.shift.php">Threaded::shift</a> — Manipulaci&oacute;n</li><li><a href="threaded.synchronized.php">Threaded::synchronized</a> — Sincronizaci&oacute;n</li><li><a href="threaded.wait.php">Threaded::wait</a> — Sincronizaci&oacute;n</li></ul></li><li><a href="class.thread.php">Thread</a> — La clase Thread<ul class="chunklist chunklist_book chunklist_children"><li><a href="thread.getcreatorid.php">Thread::getCreatorId</a> — Identificaci&oacute;n</li><li><a href="thread.getcurrentthread.php">Thread::getCurrentThread</a> — Identificaci&oacute;n</li><li><a href="thread.getcurrentthreadid.php">Thread::getCurrentThreadId</a> — Identificaci&oacute;n</li><li><a href="thread.getthreadid.php">Thread::getThreadId</a> — Identificaci&oacute;n</li><li><a href="thread.isjoined.php">Thread::isJoined</a> — Detecci&oacute;n de estado</li><li><a href="thread.isstarted.php">Thread::isStarted</a> — Detecci&oacute;n de estado</li><li><a href="thread.join.php">Thread::join</a> — Sincronizaci&oacute;n</li><li><a href="thread.start.php">Thread::start</a> — Ejecuci&oacute;n</li></ul></li><li><a href="class.worker.php">Worker</a> — La clase Worker<ul class="chunklist chunklist_book chunklist_children"><li><a href="worker.collect.php">Worker::collect</a> — Recopila las referencias de las tareas finalizadas</li><li><a href="worker.getstacked.php">Worker::getStacked</a> — Obtiene el tama&ntilde;o de pila restante</li><li><a href="worker.isshutdown.php">Worker::isShutdown</a> — Detecci&oacute;n de estado</li><li><a href="worker.shutdown.php">Worker::shutdown</a> — Detener el worker</li><li><a href="worker.stack.php">Worker::stack</a> — Apila la tarea</li><li><a href="worker.unstack.php">Worker::unstack</a> — Desapila una tarea</li></ul></li><li><a href="class.collectable.php">Collectable</a> — La interfaz Collectable<ul class="chunklist chunklist_book chunklist_children"><li><a href="collectable.isgarbage.php">Collectable::isGarbage</a> — Determina si un objeto ha sido marcado como obsoleto</li></ul></li><li><a href="class.pool.php">Pool</a> — La clase Pool<ul class="chunklist chunklist_book chunklist_children"><li><a href="pool.collect.php">Pool::collect</a> — Recopila las referencias de las tareas completadas</li><li><a href="pool.construct.php">Pool::__construct</a> — Crea un nuevo Pool de Workers</li><li><a href="pool.resize.php">Pool::resize</a> — Redimensiona el Pool</li><li><a href="pool.shutdown.php">Pool::shutdown</a> — Detiene todos los workers</li><li><a href="pool.submit.php">Pool::submit</a> — Env&iacute;a un objeto para su ejecuci&oacute;n</li><li><a href="pool.submitTo.php">Pool::submitTo</a> — Env&iacute;a una tarea a un worker espec&iacute;fico para su ejecuci&oacute;n</li></ul></li><li><a href="class.volatile.php">Volatile</a> — La clase Volatile</li></ul></div><?php manual_footer($setup); ?>