1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files

180 lines
8.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: bf92d8bd839301de7c837d20ab1dac6c14f83bbf Maintainer: yannick 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 est une API orientée objet qui apporte tous les outils nécessaires pour
le multithreading en PHP.
Les applications PHP peuvent créer, lire, écrire, exécuter
et synchroniser des Threads, des Workers, et des objets Threaded.
</simpara>
<warning>
<simpara>
Cette extension est considérée non maintenue et morte.
</simpara>
</warning>
<tip>
<simpara>
Envisager d'utiliser <link linkend="book.parallel">parallel</link> à la place.
</simpara>
</tip>
<warning>
<simpara>
L'extension pthreads ne peut pas être utilisée dans un environnement de
serveur Web. Le Threading en PHP est donc limité aux applications basées
sur CLI uniquement.
</simpara>
</warning>
<warning>
<simpara>
pthreads (v3) peut être utilisé uniquement avec PHP 7.2+ à cause d'un
mode ZTS dangereux en PHP 7.0 et 7.1.
</simpara>
</warning>
<simpara>
La classe <classname>Threaded</classname> constitue la base de la
fonctionnalité qui permet à pthreads de fonctionner. Elle expose les méthodes
de synchronisation et quelques interfaces utiles pour le programmeur.
</simpara>
<simpara>
La classe <classname>Thread</classname> permet de créer des threads en
l'étendant simplement et en implémentant une méthode <literal>run</literal>.
Tous les membres peuvent être écrits et lus par n'importe quel contexte avec
une référence au thread. Tout contexte peut également exécuter toutes les
méthodes publiques et protégées. Le corps de la méthode run sera exécuté
dans un thread séparé lorsque la méthode <methodname>Thread::start</methodname>
de l'implémentation est appelée à partir du contexte qui l'a créé. Seul le
contexte qui crée un thread peut le démarrer et le rejoindre.
</simpara>
<simpara>
La classe <classname>Worker</classname> a un état persistant et sera
disponible à partir de l'appel à <methodname>Thread::start</methodname> (une
méthode héritée) jusqu'à ce que l'objet soit hors de portée, ou soit
explicitement arrêté (via <methodname>Worker::shutdown</methodname>). Tout
contexte avec une référence à l'objet Worker peut empiler des tâches sur le
Worker (via <methodname>Worker::stack</methodname>), où ces tâches seront
exécutées par le Worker dans un thread séparé. La méthode
<literal>run</literal> d'un objet worker est exécutée avant tout objet de la
pile du worker, ce qui permet aux ressources d'être initialisées pour que
les objets à exécuter puissent les utiliser.
</simpara>
<simpara>
La classe <classname>Pool</classname> est utilisée pour créer un groupe de
worker pour distribuer des objets <classname>Threaded</classname> parmi eux.
Il est le moyen le plus facile et le plus efficace d'utiliser plusieurs
threads dans les applications PHP.
</simpara>
<caution>
<simpara>
La classe <classname>Pool</classname> n'étend pas la classe
<classname>Threaded</classname>, et donc les objets basés sur pool sont
considérés comme des objets PHP normaux. En tant que tel, ses instances ne
doivent pas être partagées entre des contextes différents.
</simpara>
</caution>
<simpara>
La classe <classname>Volatile</classname> est nouvelle pour pthreads v3.
Elle est utilisée pour désigner les propriétés <classname>Threaded</classname>
mutable des classes <classname>Threaded</classname> (car celles-ci sont
désormais immuables par défaut). Elle est également utilisée pour stocker
des tableaux PHP dans des contextes <classname>Threaded</classname>.
</simpara>
<simpara>
La synchronisation est une capacité importante lors du Threading. Tous les
objets créés par pthreads ont été construits en synchronisation dans la
forme (qui sera familière aux programmeurs Java) de
<methodname>Threaded::wait</methodname> et
<methodname>Threaded::notify</methodname>. L'appel de
<methodname>Threaded::wait</methodname> sur un objet entraînera le contexte
à attendre qu'un autre contexte appelle
<methodname>Threaded::notify</methodname> sur le même objet. Ce mécanisme
permet une synchronisation puissante entre les objets
<classname>Threaded</classname> en PHP.
</simpara>
<caution>
<simpara>
Tout objet prévu pour être utilisé dans une partie multithreadée de
l'application doit étendre <classname>Threaded</classname>.
</simpara>
</caution>
<simpara>
Stockage des données : En règle générale, tous les types de données pouvant être sérialisés peuvent
être utilisés comme membre d'un objet Threadé, ils peuvent être lus, et écrits depuis n'importe quel
contexte avec une référence vers l'objet Threadé. Tous les types de données ne sont pas stockés
après sérialisation ; les types simples sont stockés sous leur forme initiale. Les types complexes,
les tableaux et les objets qui ne sont pas Threadés, sont stockés sérialisés ; ils peuvent être lus
et écrits dans l'objet Threadé depuis n'importe quel contexte avec une référence.
A l'exception des objets Threadés, toute référence utilisée pour définir un membre d'un objet Threadé
est séparée de la référence dans l'objet Threadé ; les mêmes données peuvent être lues directement
depuis l'objet Threadé à tout moment par n'importe quel contexte avec une référence vers l'objet Threadé.
</simpara>
<simpara>
Membres statiques : Lorsqu'un nouveau contexte est créé (Thread ou Worker),
ils sont généralement copiés, mais les ressources et objets avec un état
interne sont nullifiés (pour des raisons de sécurité). Ceci permet alors à la fonction une sorte de stockage local
au niveau du thread. Par exemple, lors du démarrage du contexte, une classe dont les membres statiques
incluent des informations de connexion vers un serveur de base de données, seules les informations
seront copiées, et non la connexion en tant que telle. Ceci permet au nouveau contexte d'initialiser
une connexion de la même façon que le contexte qui l'a créé, stockant la connexion au même endroit
sans pour autant affecter le contexte original.
</simpara>
<caution>
<simpara>
Lorsque print_r, var_dump et d'autres fonctions de débogage sont exécutées, elles n'incluent pas
de protection contre la récursion.
</simpara>
</caution>
<note>
<simpara>
Ressources : Les extensions et les fonctionnalités qui définissent des ressources en PHP ne sont pas préparées
pour ce type d'environnement ; pthreads prend des dispositions en matière de ressource à partager entre
les contextes, cependant, pour la plupart des ressources, elles devront être considérées comme dangereuses.
Un soin et une extrême prudence devront être de mise pour partager les ressources entre les contextes.
</simpara>
</note>
<caution>
<simpara>
Dans l'environnement d'exécution de pthreads, des restrictions et des limitations sont nécessaires afin de
fournir un environnement stable.
</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
-->