Php 脚本A中的sleep()是否允许脚本B运行?
我有很多脚本,每天运行很多次。一些脚本每5分钟运行一次,另一些脚本每10、15、60分钟运行一次,等等。大多数脚本都处理大量数据,它们在其中循环并处理每一行 我的主机的cron不允许我决定每个脚本的启动时间,我只能选择间隔的分钟数,因此每5分钟运行一次的脚本,运行时间为00,05,10,15。。。 每10分钟运行一次的脚本在00,10,20,30运行。。。 等等 这意味着很多脚本在00开始运行 这其实不是什么问题,只是服务器也被普通用户使用,他们通常只需要做一些不需要花很多时间的事情。但是,如果他们碰巧在很多脚本运行时这样做,那么一切都会变慢,他们甚至无法在不等待很长时间的情况下完成那些简单的事情 我在某个地方读到,sleep函数将停止CPU处理数据,并允许运行较小的任务。你知道情况是否如此吗?如果我在这些脚本中的每个循环后插入一个sleep(1),这会提高执行小任务的单个用户的性能吗,即允许他们跳过这一行 范例 每5分钟运行一次的脚本Php 脚本A中的sleep()是否允许脚本B运行?,php,performance,cpu,sleep,Php,Performance,Cpu,Sleep,我有很多脚本,每天运行很多次。一些脚本每5分钟运行一次,另一些脚本每10、15、60分钟运行一次,等等。大多数脚本都处理大量数据,它们在其中循环并处理每一行 我的主机的cron不允许我决定每个脚本的启动时间,我只能选择间隔的分钟数,因此每5分钟运行一次的脚本,运行时间为00,05,10,15。。。 每10分钟运行一次的脚本在00,10,20,30运行。。。 等等 这意味着很多脚本在00开始运行 这其实不是什么问题,只是服务器也被普通用户使用,他们通常只需要做一些不需要花很多时间的事情。但是,如果
foreach ($a_hundred_things as $one_thing) {
do_this($one_thing);
// would adding sleep(1); here improve performance?
}
当用户单击按钮时运行的脚本B
do_this_thing_that_only_takes_a_minute();
目前,如果像脚本a(以及许多其他类似脚本)这样的脚本正在运行,用户有时需要等待很长时间(几分钟)才能运行脚本B。我希望B能够以某种方式优先考虑,因为这是迫不及待的事情,而自动脚本可以承受延迟
在脚本A(以及同时运行的所有其他类似脚本)中添加睡眠(1)会提高性能吗?
我知道我可以试着测试它,但是涉及到很多脚本,而且似乎不是每次都会发生。首先也是最重要的是,
usleep()
让您指定要睡眠多少微秒,这是一个高级功能
以下是一些难题,但可以帮助您在实施更好的解决方案时减轻打击:
usleep(mt_rand(0,10000000));
while($condition) {
$start = microtime(true);
// do work
usleep( (microtime(true) - $start) * 1000000) );
}
哎呀!你已经实现了这两个?这就是所谓的“水平扩展”,以及我们在2020年如何构建现代应用程序。现在,您可以根据需要启动机器和流程,甚至可以自动启动。很抱歉给您带来不便<代码>:P睡眠挂起线程,CPU不在挂起的线程上分配时间。但这种方法会显著增加脚本的运行时间。请将提供程序更改为可以让您更好地控制crontab的提供程序。@EmanuelVintilă感谢您提供的信息。如果用户能够毫不拖延地完成他们的工作,那么增加运行时间也没关系。@MarkusZeller目前不允许这样做。但我曾考虑过使用第三方的cron服务,当可以优雅地完成任务时,这不是一个肮脏的选择。