Heim > Artikel > Backend-Entwicklung > Thread-Pool – Ich möchte PHP verwenden, um E-Mails zu senden und dann die Sendeergebnisse aufzuzeichnen. Derzeit verwende ich Redis, das ein Skript zum Ausführen von Sende- und Aufzeichnungsvorgängen verwendet.
Derzeit verwende ich ein PHP-Skript, um eine Anfrage an die externe Schnittstelle zum Senden einer E-Mail auszuführen, dann auf die Rückkehr der E-Mail zu warten, das Verarbeitungsergebnis abzurufen und das Ergebnis dann an meinen eigenen Datenbankeintrag zu senden. .
Es kann etwa 20.000 Artikel in einer Stunde verarbeiten, was zu langsam ist. .
Der Chef sagte, ich solle dafür einen Thread-Pool verwenden, aber jetzt bin ich wieder verwirrt. . Ich kenne die spezifische Methode nicht. Kann jemand den allgemeinen Prozess erklären? Benutzt du die Thread-Erweiterung?
Derzeit verwende ich ein PHP-Skript, um eine Anfrage an die externe Schnittstelle zum Senden einer E-Mail auszuführen, dann auf die Rückkehr der E-Mail zu warten, das Verarbeitungsergebnis abzurufen und das Ergebnis dann an meinen eigenen Datenbankeintrag zu senden. .
Es kann etwa 20.000 Artikel in einer Stunde verarbeiten, was zu langsam ist. .
Der Chef sagte, ich solle dafür einen Thread-Pool verwenden, aber jetzt bin ich wieder verwirrt. . Ich kenne die spezifische Methode nicht. Kann jemand den allgemeinen Prozess erklären? Benutzt du die Thread-Erweiterung?
Ich habe zufällig etwas Ähnliches gemacht und könnte mir einen Rat geben.
2w/h ≈ 5,55 QPS, was in der Tat nicht hoch ist.
Wenn nach der Vorstellung Ihres Chefs ein Single-Threaded-Skript langsam ausgeführt wird, dann verwenden Sie ein paar mehr. Dann benötigen Sie die Erweiterung pthreads (Multithreading) oder öffnen direkt mehrere Prozesse zur Verarbeitung (die Erweiterung pcntl oder sogar Direct Exec können verwendet werden).
Aber Ihren Bedürfnissen nach zu urteilen, ist das Warten auf externe E/A die Hauptursache für die Verarbeitungszeit. Sie können erwägen, mehrere E-Mails gleichzeitig zu senden (z. B. multi_curl), E-Mails asynchron zu senden (z. B. async von Curl) oder einen asynchronen Dienst (z. B. die Erweiterung swoole) zu verwenden
Fügen Sie der Datentabelle ein Feld „process_id“ hinzu.
Weisen Sie beim Einfügen von Datenbankdatensätzen „process_id“ zufällig den Wert mt_rand(1,10) zu.
Öffnen Sie 10 PHP-Skripte.
Das erste Skript verarbeitet den Datensatz mit „process_id“ 1 : Wählen Sie * aus send_email_list, wobei Prozess-ID=1 und Status=0 ist.
Das zweite Skript verarbeitet den Datensatz mit Prozess-ID 2: Wählen Sie * aus send_email_list, wobei Prozess-ID=2 und Status=0 sind.
Auf diese Weise werden 10 Prozesse verarbeitet Gleichzeitig ist dies die einfachste und direkteste Methode, mit der Sie Ihre Verarbeitungsgeschwindigkeit direkt um das Zehnfache steigern können.
Multi-Threading, Multi-Curl-Parallelität und Swoole-Asynchronität sind alles mögliche Lösungen. Die obige Lösung erfordert jedoch nur einfache Änderungen an der vorhandenen Basis und ist möglicherweise besser für das Thema geeignet.
Verwenden Sie NodeJS, um den E-Mail-Dienst im Hintergrund durchzuführen