Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre

Detaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre

小云云
小云云Original
2018-03-31 10:51:202366Durchsuche

In diesem Artikel wird hauptsächlich der gleichzeitige Betrieb von PHP-Dateien erläutert. Die Standardeinstellung lautet: Die Dateibetriebsfunktion von PHP befindet sich nicht im Blockierzustand, sondern in einem freien Betriebszustand.

Bedingungen:

  • Wenn ein Skriptvorgang erforderlich ist und ein anderer Skriptvorgang blockiert werden muss, ist eine Dateisperre erforderlich.

Sperrvorgang:

  • Fügen Sie zuerst das Schloss hinzu, prüfen Sie, ob das Schloss erfolgreich hinzugefügt wurde, und verwenden Sie es erneut, wenn es erfolgreich ist!

Sperrtyp:

  • Lesesperre: S-Lock (Share-Lock) Shared Lock, die erwartete zusätzliche Sperre vor dem Lesevorgang. Dadurch sind gleichzeitige Lesevorgänge erlaubt und zusätzliche Schreibvorgänge werden blockiert.

  • Schreibsperre: x-lock (exclusive-lock) exklusive Sperre, exklusive Sperre, versuchen Sie, den Sperrtyp vor dem Schreibvorgang hinzuzufügen. Dies hat zur Folge, dass andere Skripte weder lesen noch schreiben können.

  • Absichtssperre: Alle Skripte, die Ressourcen betreiben, folgen einer Konvention zur Verwendung von Dateisperren (Konvention).

Blockierung: Dies bedeutet, dass nach dem Entsperren des vorherigen Vorgangs der nächste Vorgang zum Sperren der Datei weiterhin ausgeführt werden kann

Funktion :

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

Typparameter ($operation): LOCK_SH Lesesperre und LOCK_EX Schreibsperre

Beispiel:
Lesesperre verwenden:
Detaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre
Schreibsperre verwenden:
Detaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre

Sie können LOCK_NB verwenden, um nicht zu blockieren, wenn die Sperre fehlschlägt:

<?php
$fp = fopen(&#39;/tmp/lock.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    exit(-1);
}

/* ... */

fclose($fp);

Entsperren: Vor PHP 5.3.2-Version, die sperren auch Es wird von fclose() freigegeben (es wird automatisch aufgerufen, nachdem das Skript beendet ist), und jetzt kann es nur manuell entsperrt werden über flock($fp,LOCK_UN)

Standard: PHPs Dateioperationsfunktion, nicht blockierter, sondern freier Betriebszustand.

Bedingungen:

  • Wenn ein Skriptvorgang erforderlich ist und ein anderer Skriptvorgang blockiert werden muss, ist eine Dateisperre erforderlich.

Sperrvorgang:

  • Fügen Sie zuerst das Schloss hinzu, prüfen Sie, ob das Schloss erfolgreich hinzugefügt wurde, und verwenden Sie es erneut, wenn es erfolgreich ist!

Sperrtyp:

  • Lesesperre: S-Lock (Share-Lock) Shared Lock, die erwartete zusätzliche Sperre vor dem Lesevorgang. Dadurch sind gleichzeitige Lesevorgänge erlaubt und zusätzliche Schreibvorgänge werden blockiert.

  • Schreibsperre: x-lock (exclusive-lock) exklusive Sperre, exklusive Sperre, versuchen Sie, den Sperrtyp vor dem Schreibvorgang hinzuzufügen. Dies hat zur Folge, dass andere Skripte weder lesen noch schreiben können.

  • Absichtssperre: Alle Skripte, die Ressourcen betreiben, folgen einer Konvention zur Verwendung von Dateisperren (Konvention).

Blockierung: Dies bedeutet, dass nach dem Entsperren des vorherigen Vorgangs der nächste Vorgang zum Sperren der Datei weiterhin ausgeführt werden kann

Funktion :

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

Typparameter ($operation): LOCK_SH Lesesperre und LOCK_EX Schreibsperre

Beispiel:
Lesesperre verwenden:
Detaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre
Schreibsperre verwenden:
Detaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre

Sie können LOCK_NB verwenden, um nicht zu blockieren, wenn die Sperre fehlschlägt:

<?php
$fp = fopen(&#39;/tmp/lock.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    exit(-1);
}

/* ... */

fclose($fp);

Entsperren: Vor PHP 5.3.2-Version, die lock auch Es wird von fclose() freigegeben (es wird automatisch aufgerufen, nachdem das Skript beendet ist) und kann jetzt nur noch manuell über flock($fp,LOCK_UN) entsperrt werden.

Verwandte Empfehlungen:

Wie PHP Dateisperren verwendet, um Probleme mit hoher Parallelität zu lösen

PHP verwendet Dateisperren, um Probleme mit hoher Parallelität zu lösen

So lösen Sie hohe Parallelität in PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre. 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