PHP FIBERS ПРИМЕРЫ

PHP fibers - это многопоточное расширение, которое появилось в PHP 8.1 и оно позволяет создавать легковесные потоки управления, состоящие из одного или нескольких фиберов. Фиберы быстрее создаются и расходуют меньше памяти, поскольку они не имеют своего собственного стека и запускаются в контексте существующего потока управления.

Один из примеров использования PHP fibers - это альтернативная реализация асинхронности. Давайте рассмотрим следующий пример кода:

$fibers = [];
$fibers[] = Fiber::create(function() {
echo 'Fiber 1 started';
Fiber::yield();
echo 'Fiber 1 resumed';
});
$fibers[] = Fiber::create(function() {
echo 'Fiber 2 started';
Fiber::yield();
echo 'Fiber 2 resumed';
});

foreach ($fibers as $fiber) {
$fiber->start();
}

foreach ($fibers as $fiber) {
$fiber->resume();
}

В этом примере мы создаем два фибера, которые выводят сообщения на экран и ждут, пока не вызовут функцию Fiber::resume(). Затем мы запускаем оба фибера и вызываем их методы Fiber::resume(), чтобы они продолжили работу. Это позволяет нам создать несколько параллельных потоков управления, которые выполняются с помощью PHP fibers.

PHP fibers также можно использовать для реализации конвейера данных. Рассмотрим следующий пример:

$pipelines = [
function ($data) {
echo 'Stage 1
';
$data['stage1'] = 'done';
return $data;
},
function ($data) {
echo 'Stage 2
';
$data['stage2'] = 'done';
return $data;
},
function ($data) {
echo 'Stage 3
';
$data['stage3'] = 'done';
return $data;
},
];

$fiber = Fiber::create(function($input) use ($pipelines) {
foreach ($pipelines as $pipeline) {
$input = $pipeline($input);
Fiber::yield($input);
}
});

$data = ['initial' => 'data'];
$fiber->start($data);

while ($fiber->status() === Fiber::STATUS_RUNNING) {
$data = $fiber->resume();
echo 'Resume: ';
print_r($data);
}

В этом примере мы создаем конвейер из трех этапов, которые преобразуют данных. Мы создаем фибер и передаем ему на вход исходные данные. Затем мы запускаем фибер и вызываем метод Fiber::resume(), чтобы он начал работу. После каждого этапа конвейера мы вызываем Fiber::yield(), чтобы остановить выполнение фибера и передать преобразованные данные. Затем мы повторяем этот процесс, пока конвейер не завершится. Использование PHP fibers позволяет создавать конвейеры данных, которые работают параллельно и обрабатывают большие объемы данных эффективнее, чем последовательное выполнение.

5 Exciting New Features in PHP 8.1

BREAKING: The New PHP Foundation Is Formed! - Is this the Biggest News in 20 Years PHP?

New Feature: What the Fibers extension can do for you - Bohuslav Šimek

Asynchronous PHP In Examples #slideless - Denys Bulakh

What is the PHP 8.1 Fibers? I'll explain you EVERYTHING! - PHP 8.1 New Features

What’s New in PHP 8.1: Enums, First-Class Callables, Fibers, Readonly Properties, and More

PHP Interview Questions and Answers - PHP Tutorial - PHP Certification Training - Edureka

PHP Fibers - Milko Kosturkov - PHP UK 2022

Реклама
Новое
Реклама