如何减少perl中的等待时间

如何减少perl中的等待时间,perl,Perl,我有一个脚本,它每秒查询数据库的次数是可变的 例如,为了实现每小时36000个查询,我们在脚本中输入每分钟600个查询600 x 60=36000 这是我们得到的输出,您可以看到每个查询之间的延迟 {1} [2019-11-06 21:38:01.313] {1} [2019-11-06 21:38:01.413] {1} [2019-11-06 21:38:01.513] {1} [2019-11-06 21:38:01.613] {1} [2019-11-06 21:38:01.713] {

我有一个脚本,它每秒查询数据库的次数是可变的

例如,为了实现每小时36000个查询,我们在脚本中输入每分钟600个查询600 x 60=36000

这是我们得到的输出,您可以看到每个查询之间的延迟

{1} [2019-11-06 21:38:01.313]
{1} [2019-11-06 21:38:01.413]
{1} [2019-11-06 21:38:01.513]
{1} [2019-11-06 21:38:01.613]
{1} [2019-11-06 21:38:01.713]
{1} [2019-11-06 21:38:01.813]
我的问题是我们错过了0.0100,因为我们有一个等待时间

每分钟速率=变化我们可以将此更改为每分钟最多960个查询,但我们希望fourmla能够灵活地处理0-960个查询

我的$wait_时间=(1/$rpm)*60*1(连接);(最多4个连接)等待时间根据连接数增加

有人知道如何减少查询之间的等待时间吗

谢谢

这是代码行

我的$wait_时间=(1/$rpm)*60*1

所以当我每分钟输入600个查询时

此代码行根据连接数计算等待时间

我的$wait_时间=(1/600)*60*1


1/600*60*1=WAIT:0.1

嗯,您处理查询需要时间。如果我对你的问题的解释正确的话,一个脆弱的解决方案是测量当前处理所花费的时间,并将其从下一个睡眠时间中减去。当然,如果处理时间等于或超过睡眠时间,就会中断


一个干净的解决方案是有一个专用的主循环,它除了在单独的线程中休眠和启动查询之外什么都不做。

我不确定这是否有帮助,因为我很难理解您的问题。我想你担心的是你没有按照你想要的速度提出问题

这可能是因为您认为等待时间是静态的。不是等待时间是静态的——这取决于前一个查询花费了多长时间——而是间隔是静态的

use Time::HiRes qw( time sleep );  # Add support for fractional times.

my $interval = (1 / $qpm) * 60 * 1;  # In (fractional) seconds.
my $next_run = time;
while (1) {
   my $wait = $next_run - time;
   sleep($wait) if $wait > 0;
   $next_run += $interval;

   ... do work ...
}

请显示您当前拥有的代码。Re“这是一个历元时间输出的示例。”,时间是多少?Re“我们错过了0.00100”,这是什么意思?0.00100是多少?“我们有一个等待时间”——什么“等待时间”?你在问如何减少“等待时间”,所以想必你还没有自己设置好…?@ikegami-很抱歉,查询弄错了-我已经更新了帖子。输出是查询运行时的结果—执行查询所用的时间。等待时间是两个值之间的差值,例如查询中的313-413第一行。启动线程非常昂贵。如果你睡
$wait\u time
的话,这将最终导致漂移。即使启动线程没有那么昂贵,情况也是如此。做一件事36000次加起来。修复了错误。