Was ist der Unterschied zwischen blockierenden und nicht blockierenden PHP-Programmen?

WBOY
Freigeben: 2023-03-15 16:28:02
Original
2376 Leute haben es durchsucht

Der Unterschied zwischen blockierenden und nicht blockierenden PHP-Programmen besteht darin, dass der aktuelle Thread angehalten wird, bevor das blockierende Aufrufergebnis zurückgegeben wird, und der Aufrufer den Aufruf nicht weiter ausführt, bevor das nicht blockierende Aufrufergebnis zurückgegeben wird blockiert den aktuellen Thread nicht. Sie können mit der Ausführung nach unten fortfahren.

Was ist der Unterschied zwischen blockierenden und nicht blockierenden PHP-Programmen?

Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP-Version 7.1, Dell G3-Computer.

Was ist der Unterschied zwischen blockierenden und nicht blockierenden PHP-Programmen?

Blockierender und nicht blockierender Fokus liegt auf dem Status des Programms beim Warten auf das Aufrufergebnis (Nachricht, Rückgabewert).

Blockierender Aufruf bedeutet, dass vor dem Wird das Aufrufergebnis zurückgegeben, wird der aktuelle Thread angehalten. Der aufrufende Thread kehrt erst zurück, nachdem er das Ergebnis erhalten hat.

Ein nicht blockierender Aufruf bedeutet, dass der Aufruf den aktuellen Thread erst blockiert, wenn das Ergebnis nicht sofort abgerufen werden kann.

1.php Parallelitätsblockierung

Parallelität ist ein Problem für PHP. Vor dem Schreiben der Bibliothek stoßen wir häufig auf einige Abfragen, um festzustellen, ob die Daten vorhanden sind. Wenn sie jedoch gleichzeitig sind, führt dies zu einer Datenduplizierung Ihr Urteil wird zur Fiktion. Beim Blockieren müssen wir die Anforderungen also einzeln ausführen.

Eine kurze Einführung:

1. Öffnen oder erstellen Sie zunächst die Datei lock.txt im Lese- und Schreibmodus

2. Fügen Sie der Datei lock.txt eine „exklusive Sperre“ hinzu Fahren Sie mit dem nächsten Schritt „Bearbeitung der Bestellung“ fort.

3. Nach der Verarbeitung der Daten „heben Sie die Sperre auf“ und schließen Sie die geöffnete Datei Keine „Freigabesperre“ im Inneren, es wird ein sehr hängendes

public function index(){
    $fp = fopen("lock.txt", "w+");
    if(flock($fp,LOCK_EX))
    {
        $find=Db::name('user')->where('username','name2')->find();
        if($find){
            $data['username']='name3';
            $data['password']='';
            $data['password_m']='';
            Db::name('user')->insert($data);
        }else{
            $data['username']='name2';
            $data['password']='';
            $data['password_m']='';
            Db::name('user')->insert($data);
        }
        flock($fp,LOCK_UN);
    }
    fclose($fp);
    return 'success';
}
Nach dem Login kopieren

Hinweis: Dies ist für kleine Parallelität möglich und die Leistung wird keine großen Auswirkungen haben. Es ist besser, wenn die Parallelität weniger als 500 beträgt. Wenn sie zu hoch ist, wird empfohlen, den Warteschlangenmodus zu verwenden.

2.php Nicht blockierender Modus

Der nicht blockierende Modus wird häufig in PHP-Programmen verwendet, um API-Schnittstellen von Drittanbietern oder Programme aufzurufen, die nicht auf Ergebnisse warten müssen.

Geben Sie ein einfaches Beispiel. Um E-Mails zu senden, müssen Sie sie an alle Ihre Vorgesetzten senden, also müssen Sie sie alle einmal senden. Möglicherweise müssen Sie eine Schleife schreiben, sodass die Methode zum Senden von E-Mails in dieser Schleife Ausführungszeit erfordert und Sie diese erhalten müssen Geben Sie den Wert zurück und führen Sie ihn beim nächsten Mal aus. Diese Zeit wird nacheinander akkumuliert, und die letzte Zeit wird sehr lang sein. Dann wird dies als Blockieren bezeichnet, und wir möchten immer die Vergangenheit einreichen, ohne auf die Rückgabe zu warten Daten können Sie einfach in einer Schleife ausführen. Dann denken wir über den nicht blockierenden Modus nach. Für diese Art von Situation verfügt PHP nicht über gute Funktionen, daher stellen wir es am häufigsten in die Warteschlange. Beim Senden von E-Mails wird

entsprechend der Warteschlange ausgeführt, tatsächlich wird jedoch der Blockierungsmodus verwendet. Die Ausführungszeit unserer Anfrage wird jedoch sehr kurz sein. Am häufigsten wird der Aufruf der API-Schnittstelle verwendet, und der Rückgabewert ist Ihnen zu diesem Zeitpunkt egal.

Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen blockierenden und nicht blockierenden PHP-Programmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!