1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-23 22:52:18 +01:00
Files
archived-doc-fr/reference/swoole/swoole.coroutine.lock.xml
2026-02-19 20:01:29 +01:00

137 lines
4.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 93e05c681bfdbfdd60cec941173c6fe8e8c95cf6 Maintainer: Fan2Shrek Status: ready -->
<!-- Reviewed: yes -->
<reference xml:id="class.swoole-coroutine-lock" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>La classe Swoole\Coroutine\Lock</title>
<titleabbrev>Swoole\Coroutine\Lock</titleabbrev>
<partintro>
<!-- {{{ Swoole\Coroutine\Lock intro -->
<section xml:id="swoole-coroutine-lock.intro">
&reftitle.intro;
<para>
Swoole 6.0.1 a introduit un verrou de coroutine qui prend en charge le partage entre processus et thread.
Ce verrou est conçu pour un comportement non-bloquant et permet une synchronisation efficace des coroutines
dans des environnements multi-processus et multi-thread.
</para>
<para>
Lorsque compilé avec l'option <literal>--enable-iouring</literal> et que le noyau Linux prend en charge
la fonctionnalité <literal>io_uring futex</literal>, le verrou de coroutine de Swoole utilise
<literal>io_uring futex</literal> pour la synchronisation. Dans ce cas, les coroutines attendent pour la fin de verrouillage
en utilisant un mécanisme de mise en file d'attente efficace, ce qui améliore considérablement les performances.
</para>
<para>
Sans <literal>io_uring futex</literal>, le verrou de coroutine utilise un mécanisme de sommeil avec
un backoff exponentiel, où le temps d'attente augmente de 2^n millisecondes (n étant le nombre d'échecs)
après chaque tentative échouée d'acquérir le verrou. Bien que cette approche évite l'attente active, elle introduit
une surcharge supplémentaire de planification CPU et une latence accrue.
</para>
<para>
Le verrou de coroutine est conçu pour être utilisé dans des environnements où les coroutines peuvent effectuer en toute sécurité
plusieurs opérations de verrouillage.
</para>
<warning>
<para>
Ne pas créer de verrou dans une fonction de rappel telle que <literal>onReceive</literal>, car cela entraînera
une croissance continue de la mémoire et conduira à des fuites de mémoire.
</para>
</warning>
<warning>
<para>
Verrouiller et déverrouiller doivent être effectués dans la même coroutine, sinon cela rompra
les conditions statiques.
</para>
</warning>
</section>
<!-- }}} -->
<section xml:id="swoole-coroutine-lock.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass><classname>Swoole\Coroutine\Lock</classname></ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<classname>Swoole\Coroutine\Lock</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.swoole-coroutine-lock')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])" />
</classsynopsis>
<!-- }}} -->
</section>
<section xml:id="swoole-coroutine-lock.examples">
&reftitle.examples;
<example xml:id="swoole-coroutine-lock.example.basic">
<title>Utilisation basique</title>
<programlisting role="php">
<![CDATA[
<?php
use Swoole\Coroutine\Lock;
use Swoole\Coroutine\WaitGroup;
use function Swoole\Coroutine\go;
use function Swoole\Coroutine\run;
$lock = new Lock();
$waitGroup = new WaitGroup();
run(function() use ($lock, $waitGroup) {
go(function() use ($lock, $waitGroup) {
$waitGroup->add();
$lock->lock();
sleep(1);
$lock->unlock();
$waitGroup->done();
});
go(function() use ($lock, $waitGroup) {
$waitGroup->add();
$lock->lock(); // Attend la coroutine qui détient le verrou
sleep(1);
$lock->unlock();
$waitGroup->done();
});
echo 'Lock does not block the process';
$waitGroup->wait();
});
]]>
</programlisting>
</example>
</section>
</partintro>
&reference.swoole.swoole.coroutine.entities.lock;
</reference>
<!-- 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
-->