Heim > Backend-Entwicklung > PHP8 > Hauptteil

PHP8.1 Fiber führt Cross-Multitasking aus (mit detaillierter Code-Erklärung)

藏色散人
Freigeben: 2023-02-17 12:30:02
nach vorne
4083 Leute haben es durchsucht

Nehmen Sie die for-Schleife, die normalerweise jeder schreibt, als Beispiel. Wie bei go können Sie zwei

schreiben und in jede eine Schleife schreiben, um sie gleichzeitig einzugeben. Sie können sehen, dass die Ausgabe abwechselnd ist. Wenn in früheren PHP-Versionen nur eine CLI geöffnet und mehrere for-Schleifen geschrieben wurden, muss die Ausgabe sequentiell erfolgen. Eine übergreifende Ausgabe kann nicht erreicht werden (dh nach mehrmaliger Ausführung in der ersten Schleife kann b erneut ausgeführt werden, b kann für einen bestimmten Zeitraum ausgeführt werden und dann kann A ausgeführt werden).

Mit Hilfe von Ballaststoffen können wir diesen Vorgang nun auch erreichen. [Empfohlenes Lernen: goPHP-Video-Tutorial

]

Der folgende Code kann die übergreifende Ausführung von zwei Schleifen erreichen. Sie können sogar die Ausführungshäufigkeit von zwei Programmen steuern (zum Beispiel wird A dreimal und B einmal ausgeführt)

<?php
$t1    = false;
$t2    = false;
$reg   = [];
$reg[] = new \Fiber(function () use (&$t1) {
    for ($i = 1; $i < 10; $i++) {
        echo $i;
        echo PHP_EOL;
        \Fiber::suspend();

    }
    $t1 = true;
});


$reg[] = new \Fiber(function () use (&$t2) {
    for ($i = 1; $i < 10; $i++) {
        echo $i;
        echo PHP_EOL;
        \Fiber::suspend();
    }
    $t2 = true;
});

$startTag = true;
while (count($reg) > 1) {

    if ($startTag) foreach ($reg as $pI) {
        $pI->start();
        $startTag = false;
    }

    foreach ($reg as $pI) {
        $pI->resume();
    }

    if ($t1 === true && $t2 === true) {
        break;
    }
}
Nach dem Login kopieren
rreee

Sie können sogar die Ausführungshäufigkeit von zwei Schleifen steuern, zum Beispiel nachdem die erste Schleife dreimal ausgeführt wurde , die zweite Schleife Einmal ausführen. Der Code lautet wie folgt:

1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
Nach dem Login kopieren
<?php
$reg = [];
$fId = 1;


$reg[$fId] = new \Fiber(function () use (&$reg, $fId) {
    for ($i = 1; $i < 10; $i++) {
        echo $fId . &#39;:&#39; . $i;
        echo PHP_EOL;
        if ($i % 3 == 0) {
            \Fiber::suspend();
        }
    }
    unset($reg[$fId]);
});
$fId++;

$reg[$fId] = new \Fiber(function () use (&$reg, $fId) {
    for ($i = 1; $i < 10; $i++) {
        echo $fId . &#39;:&#39; . $i;
        echo PHP_EOL;
        \Fiber::suspend();
    }
    unset($reg[$fId]);
});

$startTag = true;
while (count($reg) > 0) {
    if ($startTag) foreach ($reg as $pI) {
        $pI->start();
        $startTag = false;
    }
    foreach ($reg as $pI) {
        $pI->resume();
    }
}
Nach dem Login kopieren

Durch Nachrichtenbenachrichtigung abschließen

1:1
1:2
1:3
2:1
1:4
1:5
1:6
2:2
1:7
1:8
1:9
2:3
2:4
2:5
2:6
2:7
2:8
2:9
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPHP8.1 Fiber führt Cross-Multitasking aus (mit detaillierter Code-Erklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage