Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Schritte zur Verwendung von Dateisperren zur Lösung von Problemen mit hoher Parallelität in PHP
Dieses Mal werde ich Ihnen eine detaillierte Erklärung der Schritte geben, die PHP zur Verwendung von Dateisperren zur Lösung hoher Parallelität benötigt Ein praktischer Fall, werfen wir einen Blick darauf. Erstellen Sie eine neue TXT-Datei, ohne etwas in die Datei zu schreiben.
【1】. Blockierungs-(Warte-)Modus : (Solange andere Prozesse die Datei gesperrt haben, wartet der aktuelle Prozess auf andere Prozesse um die Datei zu entsperren )<?php
//连接数据库
$con=mysqli_connect("192.168.2.186","root","root","test");
//查询商品数量是否大于0,大于0才能下单,并减少库存
$fp = fopen("lock.txt", "r");
//加锁
if(flock($fp,LOCK_EX))
{
$res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1'));
if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');}
//执行完成解锁
flock($fp,LOCK_UN);
}
//关闭文件
fclose($fp);
unset($res);
mysqli_close($con);
?>
【2】 Nicht blockierender (Warte-)Modus : (Solange andere Prozesse gesperrt sind Die Datei wird vom aktuellen Prozess nicht geöffnet. Er wartet darauf, dass andere Prozesse die Datei entsperren und direkt zurückkehren Verständnis. demo.php
<?php //连接数据库 $con=mysqli_connect("192.168.2.186","root","root","test"); //查询商品数量是否大于0,大于0才能下单,并减少库存 $fp = fopen("lock.txt", "r"); //加锁 if(flock($fp,LOCK_EX | LOCK_NB)) { $res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1')); if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');} //执行完成解锁 flock($fp,LOCK_UN); } //关闭文件 fclose($fp); unset($res); mysqli_close($con); ?>demo2.php
<?php $fp = fopen("file_lock.txt", "r"); // 加锁 if(flock($fp, LOCK_EX)) { sleep(10); echo 1; //执行完成解锁 flock($fp,LOCK_UN); } else { echo 2; } //关闭文件 fclose($fp);Führen Sie zwei Dateien gleichzeitig aus und ändern Sie dann den Sperrmechanismus in Demo2. Sie können die Blockierung (Warten) sehen )-Modus und Der Unterschied zwischen dem nicht blockierenden (Warte-)Modus. Aber dies führt dazu, dass die Warteschlange blockiert wird, bevor sie ausgeführt wird. Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website! Empfohlene Lektüre:
Detaillierte Erläuterung der Verwendung des PHP-Decorator-Modus
Detaillierte Erläuterung der Schritte zum dynamischen Abrufen Funktionsparameter in PHP
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte zur Verwendung von Dateisperren zur Lösung von Problemen mit hoher Parallelität in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!