parallel
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
parallel
Референца за `book.parallel.php` со подобрена типографија и навигација.
parallel
Вовед
parallel е паралелно проширување за конкурентност за PHP ≥ 7.2.0. Од parallel 1.2.0, потребно е PHP ≥ 8.0.0.
Следи краток опис на основните концепти на parallel, подетални информации може да се најдат во овој дел од прирачникот.
Runtime
А parallel\Runtime претставува PHP интерпретерска нишка. А parallel\Runtime се конфигурира со опционална почетна датотека предадена на parallel\Runtime::__construct(), ова е типично автолоадер, или некоја друга рутина за претходно вчитување: Почетната датотека ќе биде вклучена пред да се изврши било каква задача.
По конструкцијата parallel\Runtime останува достапен додека не биде затворен, убиен или уништен од нормалните правила за опсег на PHP објекти. parallel\Runtime::run() им овозможува на програмерот да закажува задачи за извршување паралелно. А parallel\Runtime има FIFO распоред, задачите ќе се извршуваат по редоследот по кој се закажани.
Функционално API
parallel имплементира функционално API од повисоко ниво врз parallel\Runtime што обезбедува единствена влезна точка на функција за извршување паралелен код со автоматско закажување: parallel\run().
Задача
Задачата е едноставно Затворање наменета за паралелно извршување. На Затворање може да содржи речиси секоја инструкција, вклучувајќи вгнездени затворачи. Сепак, постојат некои инструкции кои се забранети во задачите:
- yield
- користи по референца
- декларирај класа
- декларирај именувана функција
Забелешка: Вгнездени затворачи може да дадат или користат по референца, но не смеат да содржат декларации за класи или именувани функции.
Забелешка: Ниту една инструкција не е забранета во датотеките што може да ги вклучува задачата.
Иднината
На parallel\Future се користи за пристап до вратената вредност од задачата и изложува API за откажување на задачата.
Канал
Задачата може да биде закажана со аргументи, да користи променливи од лексичката област (по вредност) и да врати вредност (преку parallel\Future), но овие дозволуваат само еднонасочна комуникација: Тие му дозволуваат на програмерот да испраќа податоци во и да извлекува податоци од задачата, но не дозволуваат двонасочна комуникација помеѓу задачите. parallel\Channel API дозволува двонасочна комуникација помеѓу задачите, а parallel\Channel е врска слична на приклучок помеѓу задачите што програмерот може да ја користи за испраќање и примање податоци.
Настани
На parallel\Events API имплементира нативно чувство (Траверзабилно) циклус на настани, и parallel\Events::poll() метод. Тој му овозможува на програмерот да работи со множества од канали и иднини. Програмерот едноставно додава канали и иднини во циклусот на настани, опционално поставувајќи го влезот за запишувања со parallel\Events::setInput(), и влегува во foreach: паралелно ќе чита и пишува во објекти како што тие стануваат достапни давајќи parallel\Events\Event објекти што ги опишуваат операциите што се случиле.
Види Исто така
- Инсталација
- Филозофија
- Функционално API
- parallel\bootstrap — Иницијализација
- parallel\run — Синхронизација
- parallel\Runtime — Класата parallel\Runtime
- parallel\Runtime::__construct — Bootstrapping
- parallel\Runtime::run — Синхронизација
- parallel\Runtime::close — Runtime Construction
- parallel\Runtime::kill — Runtime Graceful Join
- parallel\Future — Класата parallel\Future
- parallel\Future::cancel — Runtime Join
- parallel\Future::cancelled — Регистрација
- parallel\Future::done — Регистрација
- parallel\Future::value — Cancellation
- parallel\Channel — Класата parallel\Channel
- parallel\Channel::__construct — Resolution
- parallel\Channel::make — Channel Construction
- parallel\Channel::open — Channel Construction
- parallel\Channel::recv — Access
- parallel\Channel::send — Access
- parallel\Channel::close — Sharing
- parallel\Events — Класата parallel\Events
- parallel\Events::setBlocking — Closing
- parallel\Events::setTimeout — Closing
- parallel\Events::setInput — Behaviour
- parallel\Events::addChannel — Input
- parallel\Events::addFuture — Input
- parallel\Events::remove — Input
- parallel\Events::poll — Targets
- parallel\Events\Input — Класата parallel\Events\Input
- parallel\Events\Input::add — Polling
- parallel\Events\Input::clear — Polling
- parallel\Events\Input::remove — Polling
- parallel\Events\Event — Класата parallel\Events\Event
- parallel\Events\Event\Type — Класата parallel\Events\Event\Type
- parallel\Sync — Класата parallel\Sync
- parallel\Sync::__construct — Inputs
- parallel\Sync::get — Channel Construction
- parallel\Sync::set — Channel Construction
- parallel\Sync::wait — Откривање на состојба
- parallel\Sync::notify — Откривање на состојба
- parallel\Sync::__invoke — Откривање на состојба