Heim >Backend-Entwicklung >PHP8 >PHP8.1 Fiber führt Cross-Multitasking aus (mit detaillierter Code-Erklärung)
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: go
PHP-Video-Tutorial
<?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; } }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
<?php $reg = []; $fId = 1; $reg[$fId] = new \Fiber(function () use (&$reg, $fId) { for ($i = 1; $i < 10; $i++) { echo $fId . ':' . $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 . ':' . $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(); } }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
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!