记一次PHP实现flock非阻塞的实现方式测试问题

$file = 'test.txt';
 
$fp = fopen($file, 'a');
 //添加可实现不阻塞,从而跳过执行if为真的语句快
if(flock($fp, LOCK_EX|LOCK_NB)){            // 取得独占锁
    fwrite($fp, "How Are You\r\n");         // 写入数据
    fwrite($fp, "Show Me The Money\r\n");   // 写入数据
    flock($fp, LOCK_UN);                    // 解锁
}else{
    echo 'file locked';
}
 
fclose($fp);

添加LOCK_NB(在非 Windows 平台上)可实现不阻塞,从而跳过执行if为真的语句快,但在通过浏览器测试下,确感觉还是被阻塞了,

通过搜索查看https://stackoverflow.com/questions/13331809/php-flock-non-blocking-still-block-why

才知道了原来是因为使用来自浏览器的相同url调用相同的脚本两次将通过相同的进程进行线程并且flock()函数在进程层上进行非阻塞工作,导致第二个脚本等待

image.png

支付宝扫码打赏 微信扫码打赏

如果本文对你有帮助,欢迎打赏本站

喜欢 ()or分享