Heim  >  Artikel  >  PHP-Framework  >  Der Unterschied zwischen dem traditionellen FPM-Synchronisationsmodus und der Swoole-Coroutine

Der Unterschied zwischen dem traditionellen FPM-Synchronisationsmodus und der Swoole-Coroutine

王林
王林Original
2019-12-09 09:28:452564Durchsuche

Der Unterschied zwischen dem traditionellen FPM-Synchronisationsmodus und der Swoole-Coroutine

Erstens kann Swoole nur im Befehlszeilenmodus (Cli) ausgeführt werden, daher verwenden wir die Befehlszeile für Entwicklung und Debugging, nicht PHP-FPM/Apache usw. In Swoole können wir `SwooleCoroutine::create()` verwenden, um Coroutinen zu erstellen, oder Sie können auch die Abkürzung „go()“ verwenden.

Erste Einführung in die Swoole-Coroutine

Der Unterschied zwischen dem traditionellen FPM-Synchronisationsmodus und der Swoole-Coroutine

Ausführungsergebnis:

Der Unterschied zwischen dem traditionellen FPM-Synchronisationsmodus und der Swoole-Coroutine

Swoole-Coroutine-Vergleich mit synchronem Modus

Wir haben immer gesagt, dass Swoole-Coroutine für E/A-intensive Szenarien geeignet ist und mehr Zugriffe ermöglicht als der herkömmliche synchrone Modus.

Die uns bekannten Dateilese- und -schreib- und Netzwerkkommunikationsanfragen (MySQL, Redis, HTTP usw.) sind allesamt E/A-intensive Szenarien.

Angenommen, eine SQL-Abfrage dauert 100 ms. Im herkömmlichen Synchronisierungsmodus kann der aktuelle Prozess während dieser 100 ms keine anderen Vorgänge ausführen. Wenn Sie diese SQL zehnmal ausführen möchten, kann dies mehr als 1 Sekunde dauern.

Wenn Sie Coroutinen verwenden, plant die unterste Ebene die CPU, die Operationen anderer Coroutinen während der vorherigen Wartezeit von 100 ms auszuführen, obwohl verschiedene Coroutinen der Reihe nach ausgeführt werden. Mit anderen Worten: Die erste Abfrage hat möglicherweise keine Ergebnisse zurückgegeben und mehrere andere Abfragen wurden an MySQL gesendet und werden ausgeführt. Wenn zehn Coroutinen geöffnet sind und diese SQL separat ausgeführt wird, dauert der Abschluss möglicherweise nur 100+ms.

Der Testcode lautet wie folgt:

Swoole\Runtime::enableCoroutine(); // 开启一键协程化
  
function work()
{
    $pdo = new \PDO('mysql:host=127.0.0.1;dbname=db_test', 'root', 'root');
    $pdo->exec('select SLEEP(0.1)'); // 模拟sql需要执行 100ms 的情况
}
$time = microtime(true);
for($i = 0; $i < 10; ++$i)
{
    work();
}
echo &#39;time: &#39;, (microtime(true) - $time), &#39;s&#39;, PHP_EOL;
$time = microtime(true);
for($i = 0; $i < 10; ++$i)
{
    go(&#39;work&#39;);
}
swoole_event_wait(); // 等待所有协程执行完
echo &#39;time: &#39;, (microtime(true) - $time), &#39;s&#39;, PHP_EOL;

Ausführungsergebnis:

time: 1.0326268672943s
time: 0.10734605789185s

Der obige Code kann man sich als die Zeit vorstellen, die ein einzelner Prozess zur Verarbeitung von 10 benötigt Anfragen. Jede Anfrage erfordert die Ausführung einer SQL-Anweisung, die 100 ms dauert.

Synchronmodus, der etwa 1 Sekunde oder fpm dauert. Wie man sieht, kann während der Wartezeit von 100 ms nichts unternommen werden.

Das Coroutine-Modell, das etwa 0,1 s dauert, ist Swoole. Während der Wartezeit von 100 ms wird die aktuelle Coroutine angehalten und die zugrunde liegende Planung ermöglicht es der CPU, die Operationen anderer Coroutinen auszuführen.

Empfohlene verwandte Artikel und Tutorials: Swoole-Tutorial

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen dem traditionellen FPM-Synchronisationsmodus und der Swoole-Coroutine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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

In Verbindung stehende Artikel

Mehr sehen