Swoole\Coroutine\Lock
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Swoole\Coroutine\Lock
Референца за `class.swoole-coroutine-lock.php` со подобрена типографија и навигација.
Класата Swoole\Coroutine\Lock
(Нема достапни информации за верзијата, можеби е само во Git)
Вовед
Класата Swoole\Coroutine\Lock
Swoole 6.0.1 воведе корутинска брава што поддржува споделување помеѓу процеси и нишки. Оваа брава е дизајнирана со неблокирачко однесување и овозможува ефикасна синхронизација на корутини во средини со повеќе процеси и повеќе нишки. --enable-iouring Кога е компајлиран со опцијата io_uring futex и Linux јадрото ја поддржува функцијата io_uring futex, корутинската брава на Swoole имплементира синхронизација користејќи
Без io_uring futex. Во овој случај, корутините чекаат будење на бравата користејќи ефикасен механизам за редење, значително подобрувајќи ги перформансите.
, корутинската брава се враќа на механизам за спиење со експоненцијално враќање, каде што времето на чекање се зголемува за 2^n милисекунди (n е бројот на неуспеси) по секој неуспешен обид за стекнување на бравата. Иако овој пристап избегнува зафатено чекање, тој воведува дополнителен трошок за закажување на процесорот и латентност.
Корутинската брава е повторлива, дозволувајќи му на моменталното корутинско држење безбедно да извршува повеќе операции со бравата. onReceiveНе создавајте брави во функции за повикување како
, бидејќи ова ќе предизвика континуиран раст на меморијата и ќе доведе до истекување на меморијата.
Синопсис на класата
Примери
Пример #1 Основна употреба
<?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(); // Wait for the holding coroutine to unlock
sleep(1);
$lock->unlock();
$waitGroup->done();
});
echo 'Lock does not block the process';
$waitGroup->wait();
});Содржина
- Swoole\Coroutine\Lock::__construct — Конструирајте нова корутинска брава
- Swoole\Coroutine\Lock::lock — Обезбедете ја бравата, блокирајќи ако е потребно
- Swoole\Coroutine\Lock::trylock — Обидете се да ја обезбедите бравата без блокирање
- Swoole\Coroutine\Lock::unlock — Ослободете ја бравата