程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何仅减慢当前请求? sleep() 没有按预期工作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何仅减慢当前请求? sleep() 没有按预期工作?

开发过程中遇到如何仅减慢当前请求? sleep() 没有按预期工作的问题如何解决?下面主要结合日常开发的经验,给出你关于如何仅减慢当前请求? sleep() 没有按预期工作的解决方法建议,希望对你解决如何仅减慢当前请求? sleep() 没有按预期工作有所启发或帮助;

有时我的应用程序需要等待一些东西。例如,在缓存的情况下:如果在缓存中找不到对象,则脚本在其键下设置一个特殊值,表示当前正在计算其值,并在完成后将其写入。如果在计算时另一个客户端请求相同的对象,则脚本不会重新计算它,而只会等待第一个。当然,这是一个简化的解释。我不知道如何正确地做到这一点,但在我看来这种行为非常合乎逻辑。

在测试一个完全不同的东西的过程中,今天我遇到了一个问题。

<?php
echo time() . "\n";
sleep(10); // usleep() has the same effect
echo time() . "\n";

同一秒,我在浏览器中的两个选项卡中打开此页面,并希望看到相同的数字,但是……稍后打开的选项卡,在除了它的延迟,出于某种原因,正在等待第一个选项卡延迟(措辞蹩脚,但你理解我),所以我看到这样的:1615749037 16157490471615749047 1615749057。如果您添加更多选项卡,那么下一个选项卡将等待所有之前的选项卡。

它打破了我的大脑。这完全不是我的想象,多年来一直在这种错觉中。我目前无法找到任何关于此的信息。首先,我对如何达到预期的结果感兴趣。为什么 sleep() 会这样,我似乎开始猜测,但如果您分享一些信息,我会很高兴。谢谢!

UPD。以防万一,我检查了这个:如果我添加 header('Cache-Control: no-cache,no-store,must-revalIDate'),那么对我来说没有任何改变。但是如果我从不同的浏览器打开标签页,那就没问题了。

解决方法

从阅读中我看到两个问题

1.如何在处理第一个请求的同时阻止第二个请求?

为此,我的答案是锁。对于 php我特别推荐 Symfony lock component。您将使两个请求都获得一个锁,并在完成并生成缓存后才释放它。

2.为什么同时触发的 2 个请求会互相等待?

我的猜测是您的浏览器有一些内置的排队/缓存或诸如此类的功能。您可以通过在不同的浏览器中打开相同的页面来查看是否会产生不同的结果来避免这种情况。

大佬总结

以上是大佬教程为你收集整理的如何仅减慢当前请求? sleep() 没有按预期工作全部内容,希望文章能够帮你解决如何仅减慢当前请求? sleep() 没有按预期工作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。