Heim > Backend-Entwicklung > PHP-Tutorial > So verwenden Sie Fibers, um Parallelität in PHP8.0 zu erreichen

So verwenden Sie Fibers, um Parallelität in PHP8.0 zu erreichen

PHPz
Freigeben: 2023-05-14 11:44:02
Original
2020 Leute haben es durchsucht

Mit der kontinuierlichen Weiterentwicklung der modernen Internettechnologie steigt die Anzahl der Website-Besuche, was auch höhere Anforderungen an die gleichzeitigen Verarbeitungsfähigkeiten des Servers stellt. Die Verbesserung der gleichzeitigen Verarbeitungsfunktionen des Servers ist ein Problem, mit dem sich jeder Entwickler auseinandersetzen muss. In diesem Zusammenhang führt PHP8.0 die neue Funktion von Fibers ein, die es PHP-Entwicklern ermöglicht, eine neue Art der Parallelitätsverarbeitung zu beherrschen.

Was sind Fasern?

Zuerst müssen wir verstehen, was Fasern sind. Fasern sind leichtgewichtige Threads, die die asynchrone Verarbeitung von PHP-Code effizient unterstützen. Herkömmlicher PHP-Code ist Single-Threaded und kann asynchrone Vorgänge nicht wirklich implementieren. Er muss oft auf den Abschluss von E/A-Vorgängen warten, was zu unnötigen Blockierungen führt. Das Aufkommen von Fibers löst dieses Problem und ermöglicht es PHP-Code, die gleichzeitige Verarbeitung wie andere Sprachen wie Node.js zu unterstützen.

Verwenden Sie Fasern, um Parallelität zu erreichen.

Lassen Sie uns darüber sprechen, wie Sie Fasern verwenden, um Parallelität zu erreichen.

  1. Installieren Sie die Swoole-Erweiterung

In PHP8.0 wird Fibers basierend auf der Swoole-Erweiterung implementiert, daher müssen Sie zuerst die Swoole-Erweiterung installieren. Es kann über PECL installiert werden:

pecl install swoole 
Nach dem Login kopieren
  1. Erstellen Sie Fiber-Objekte

Die Verwendung von Fibers zum Erreichen von Parallelität erfordert die Erstellung von Fiber-Objekten. Das Erstellen von Fiber-Objekten kann durch Erstellen anonymer Funktionen oder Klassenmethoden erreicht werden. Zum Beispiel:

$fiber = new SwooleFiber(function() {
  // 这里是并发要执行的代码
});

或

class MyClass {
  public function onReceive($server, $fd, $reactor_id, $data) {
    // 这里是并发要执行的代码
  }
}
$fiber = new SwooleFiber([$myClass, 'onReceive']);
Nach dem Login kopieren
  1. Fiber starten

Nachdem Sie das Fiber-Objekt erstellt haben, müssen Sie Fiber starten. Um Fiber zu starten, können Sie die Methode start oder die Methode suspend verwenden. Verwenden Sie die Methode start, um Fiber sofort zu starten und den in Fiber definierten Code auszuführen. Zum Beispiel: start方法或者suspend方法。使用start方法可以立即启动Fiber并执行Fiber中定义的代码。例如:

$fiber->start();
Nach dem Login kopieren

suspend方法则可以暂停Fiber的执行,等待下一次执行。例如:

$fiber->suspend();
Nach dem Login kopieren
  1. 切换Fiber

在Fiber中,使用swoole_fiber_switch函数可以切换Fiber的执行。例如:

function foo() {
  echo 'foo ';
  yield;
  echo 'bar ';
  yield;
  echo 'baz';
}
$fiber1 = new SwooleFiber($foo);
$fiber2 = new SwooleFiber($foo);
$fiber1->start();
$fiber2->start();
while ($fiber1->getStatus() !== SwooleFiber::STATUS_DEAD || $fiber2->getStatus() !== SwooleFiber::STATUS_DEAD) {
  if ($fiber1->getStatus() !== SwooleFiber::STATUS_DEAD) {
    swoole_fiber_switch($fiber1);
  }
  if ($fiber2->getStatus() !== SwooleFiber::STATUS_DEAD) {
    swoole_fiber_switch($fiber2);
  }
}
Nach dem Login kopieren

在上面的例子中,我们创建了两个Fiber对象,并让它们交替执行,输出foobarbaz

  1. 使用协程API

除了手动切换Fiber外,Swoole扩展还提供了一些协程API,可以方便地进行并发处理。例如,使用Co::create方法可以创建协程对象,并使用Co::parallel可以让多个协程并行执行。例如:

$urls = [
  'http://example.com/foo',
  'http://example.com/bar',
  'http://example.com/baz',
];
$coros = [];
foreach ($urls as $url) {
  $coros[] = Co::create(function() use ($url) {
    $html = file_get_contents($url);
    return strlen($html);
  });
}
$results = Co::parallel($coros);
Nach dem Login kopieren

在上面的例子中,我们创建了三个协程对象,分别访问三个URL,最后使用Co::parallelrrreee

Die Methode suspend kann die Ausführung von Fiber anhalten und auf die nächste Ausführung warten. Zum Beispiel:

rrreee

    Fiber wechseln

    🎜Verwenden Sie in Fiber die Funktion swoole_fiber_switch, um die Ausführung von Fiber umzuschalten. Zum Beispiel: 🎜rrreee🎜Im obigen Beispiel haben wir zwei Fiber-Objekte erstellt und sie abwechselnd ausführen lassen, um foobarbaz auszugeben. 🎜
      🎜Coroutine-API verwenden🎜🎜🎜Zusätzlich zum manuellen Wechseln von Fiber bietet die Swoole-Erweiterung auch einige Coroutine-APIs für eine bequeme gleichzeitige Verarbeitung. Verwenden Sie beispielsweise die Methode Co::create, um ein Coroutine-Objekt zu erstellen, und verwenden Sie Co::parallel, um die parallele Ausführung mehrerer Coroutinen zu ermöglichen. Zum Beispiel: 🎜rrreee🎜Im obigen Beispiel haben wir drei Coroutine-Objekte erstellt, auf jeweils drei URLs zugegriffen und schließlich die Methode Co::parallel verwendet, um diese drei Coroutinen parallel auszuführen, und das Ergebnis erhalten zurückkehren. 🎜🎜Zusammenfassung🎜🎜Fibers ist eine neue Funktion, die in PHP8.0 eingeführt wurde und die erweiterten Parallelitätsverarbeitungsfunktionen von Swoole vollständig nutzt. Durch die Verwendung von Fibers kann die asynchrone Verarbeitung von PHP-Code problemlos implementiert und die gleichzeitige Verarbeitungsfähigkeit des Servers verbessert werden. Natürlich müssen Fasern auch mit Vorsicht verwendet werden und darauf geachtet werden, Probleme wie Ressourcenkonkurrenz zu vermeiden. Ich hoffe, dass die Einführung in diesem Artikel PHP-Entwicklern helfen kann, Fibers besser zu verstehen und eine bessere Parallelitätsverarbeitung durchzuführen. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Fibers, um Parallelität in PHP8.0 zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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