Heim > PHP-Framework > Swoole > Hauptteil

Wird die Swoole-Aufgabe blockieren?

(*-*)浩
Freigeben: 2019-12-16 09:18:31
Original
2890 Leute haben es durchsucht

Wird die Swoole-Aufgabe blockieren?

Wenn Sie die Swoole-Aufgabendokumentation sorgfältig gelesen haben, dürfte Ihnen dieser Satz aufgefallen sein

Die Anzahl der Aufgabenvorgänge muss geringer sein als die onTask-Verarbeitungsgeschwindigkeit Wenn die Lieferkapazität die Verarbeitungskapazität übersteigt, füllt die Aufgabe den Cache-Bereich, wodurch der Arbeitsprozess blockiert wird.

Der Arbeitsprozess kann keine neuen Anfragen empfangen.                                                                                      ’ s ’ s Woole’s Swoole’s Swoole’s Swoole’s Video-Tutorials  -    Der Dienst funktioniert nicht und verursacht Probleme.

Ich habe einmal eine Aufgabe zum Senden des Verbindungsprotokolls des Dienstes verwendet. In dem Dienst, der das Protokoll empfangen hat, ist ein Fehler aufgetreten, der dazu geführt hat, dass die Aufgabe zum Senden des Protokolls blockiert und dann gg bereitgestellt wurde. Danach habe ich eine Welle von Optimierungen an der Aufgabe vorgenommen.

Die Idee besteht darin, den Swoole-Kanal und den Swoole-Benutzerprozess zu verwenden, um eine Reihe von Aufgaben zu implementieren.

Verwenden Sie den Kanal, um Daten zu empfangen, und verbrauchen Sie die Daten dann im Benutzerprozess. Wenn der Kanal voll ist, führt dies nur dazu, dass die Push-Daten fehlschlagen und nicht blockiert werden log, Verlust ist erlaubt, daher ist diese Lösung überhaupt kein Problem.

Der Pseudocode der Strategie zum Konsumieren von Kanälen im Swoole-Benutzerprozess lautet wie folgt

$sleepTime = 5;
$maxSleepTime = 100;
while (true) {
    $task = $chan->pop();
    if ($task === false) {
        $sleepTime = $sleepTime + 5;
        if ($sleepTime > $maxSleepTime) {
            $sleepTime = $maxSleepTime;
        }
        usleep($sleepTime * 1000);
        continue;
    }
    $sleepTime = 0;
    // 处理数据
}
Nach dem Login kopieren

Wenn die Daten des Kanals verbraucht werden, wird eine Endlosschleife verwendet Verarbeiten Sie die Daten, da während des Datenverarbeitungsprozesses andere Vorgänge ausgeführt werden, sodass nicht viel CPU beansprucht wird.

Wenn die Daten nicht verbraucht werden können, wird die Ruhezeit nacheinander akkumuliert, bis sie den Maximalwert von 100 ms erreicht, um ein Gleichgewicht zwischen CPU-Auslastung und Echtzeitverarbeitung der Daten zu erreichen Der Punkt kann je nach den Bedürfnissen Ihres Unternehmens bestimmt werden.

Das obige ist der detaillierte Inhalt vonWird die Swoole-Aufgabe blockieren?. 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