mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-24 08:52:09 +01:00
182 lines
8.1 KiB
XML
182 lines
8.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 12424df3c8140290d9e5c4912cbdb260aae055f4 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<book xml:id="book.pthreads" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<?phpdoc extension-membership="pecl" ?>
|
|
<title>pthreads</title>
|
|
<titleabbrev>pthreads</titleabbrev>
|
|
|
|
<preface xml:id="intro.pthreads">
|
|
&reftitle.intro;
|
|
<para>
|
|
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.
|
|
</para>
|
|
<warning>
|
|
<simpara>
|
|
Cette extension est considéré non maintenue et morte.
|
|
</simpara>
|
|
</warning>
|
|
<tip>
|
|
<simpara>
|
|
Envisager d'utiliser <link linkend="book.parallel">parallel</link> à la place.
|
|
</simpara>
|
|
</tip>
|
|
<warning>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</warning>
|
|
<warning>
|
|
<para>
|
|
pthreads (v3) peut être utilisé uniquement avec PHP 7.2+ à cause d'un
|
|
mode ZTS dangereux en PHP 7.0 et 7.1.
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
La classe <classname>Threaded</classname> constitue la base de la
|
|
fonctionnalité qui permet à pthreads de fonctionner. Il expose les méthodes
|
|
de synchronisation et quelques interfaces utiles pour le programmeur.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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 arreté (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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
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 d
|
|
doivent pas être partagées entre des contextes différents.
|
|
</para>
|
|
</caution>
|
|
<para>
|
|
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é pour stocker
|
|
des tableaux PHP dans des contextes <classname>Threaded</classname>.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
Tout objet prévu pour être utilisé dans une partie multithreadé de votre
|
|
application doit étendre <classname>Threaded</classname>.
|
|
</para>
|
|
</caution>
|
|
<para>
|
|
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é 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é.
|
|
</para>
|
|
<para>
|
|
Membres statiques : Lorsqu'un nouveau contexte est créé (Thread ou Worker),
|
|
ils sont généralement copiés, mais les ressources et objects 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.
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</caution>
|
|
<note>
|
|
<para>
|
|
Ressources : Les extensions et les fonctionnalités qui définissent des ressoures 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.
|
|
</para>
|
|
</note>
|
|
<caution>
|
|
<para>
|
|
Dans l'environnement d'exécution de pthreads, des restrictions et des limitations sont nécessaires afin de
|
|
fournir un environnement stable.
|
|
</para>
|
|
</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
|
|
-->
|