在使用 microtime()(使用 PHP 5)记录一些数据时,我遇到了一些值,这些值似乎与我的日志文件的时间戳略有不同,所以我只是尝试比较 time() 和microtime() 和一个简单的脚本(usleep 只是为了限制数据输出):
<?php
for($i = 0; $i < 500; $i++) {
$microtime = microtime();
$time = time();
list($usec, $sec) = explode(" ", $microtime);
if ((int)$sec > $time) {
echo $time . ' : ' . $microtime . '<br>';
}
usleep(50000);
}
?>
现在,由于在 $time 之前声明了 $microtime,我希望它更小,并且永远不会输出任何内容;然而,这显然不是这种情况,$time 有时会小于 microtime() 返回的秒数,如本例(截断)输出所示:
1344536674 : 0.15545100 1344536675
1344536675 : 0.15553900 1344536676
1344536676 : 0.15961000 1344536677
1344536677 : 0.16758900 1344536678
现在,这只是一个小差距;但是,我观察到一些系列的差异(相当)超过一秒……那么,这怎么可能呢?
最佳答案
如果您查看 time 的实现和 microtime ,您会发现它们完全不同:
time 只是调用 C time功能。microtime 有两个 实现:如果 C 函数 gettimeofday可用(它应该在 Linux 系统上),它被称为直截了当。否则they pull of some acrobatics to use rusage计算时间。由于 C time 调用仅精确到一秒,它也可能有意使用低保真时间源。
此外,在现代 x86_64 系统上,both C functions can be implemented without a system call by looking into certain CPU registers .如果您使用的是多核系统,这些寄存器可能无法跨内核完全匹配,这可能是一个原因。
造成差异的另一个潜在原因是 NTPd(计时守护进程)或其他一些用户空间进程正在更改时钟。通常,应通过 adjtime 避免这些影响。 .
所有这些理由都非常深奥。要进一步调试问题,您应该:
关于php time() 和 microtime() 有时不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889809/
两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio
我希望特定模型的所有数据库交互都通过集群中的mongo主节点,因此我将模型设置为使用强一致性。classPhotoincludeMongoid::Documentwithconsistency::strongfield:number,type:Integer#let'ssayaphotonumberisuniqueinthedbvalidate:unique_numberend但这似乎不起作用,因为当我保存两张非常靠近的照片时,我仍然遇到验证错误。photo1#dbhasnumber=1forthisobjectphoto1.update_attributes(number:2)pho
gemspec语义版本控制运算符~>(又名twiddle-wakka,又名pessimistic运算符)允许限制gem版本但允许进行一些升级。我经常看到它可以读作:"~>3.1"=>"Anyversion3.x,butatleast3.1""~>3.1.1"=>"Anyversion3.1.x,butatleast3.1.1"但是有了一个数字,这条规则就失效了:"~>3"=>"Anyversionx,butatleast3"*NOTTRUE!*"~>3"=>"Anyversion3.x"*True.Butwhy?*如果我想要“任何版本3.x”,我可以只使用“~>3.0”,这是一致的。就
好的,所以我将我自己的DSL中的一些东西与Ruby进行了比较。他们都支持的一个结构是这个x=["key"=>"value"]知道数组和散列的区别,我会认为这是不合法的,但是在Ruby中的结果是[{"key"=>"value"}]这是为什么?有了这种语法,你为什么不能这样做x=("key"=>"value")为什么数组是隐式创建的哈希的特例? 最佳答案 另一个特殊情况是在函数调用中,考虑:deff(x)puts"OK:#{x.inspect}"endf("foo"=>"bar")=>OK:{"foo"=>"bar"}因此在某些情况下,
我刚刚在编程语言ruby中发现了一个奇怪的问题,这不是什么大问题,但我就是不明白为什么会这样。如果有人知道我的问题的问题,我会很感兴趣。在ruby中你可以写成0或者00,没关系,结果是一样的。如果您运行0===00,您还会得到true,这意味着两个输入完全相同。0.0也等于0,所以逻辑上00.0也应该等于0.0但问题是,如果你尝试使用数字00.0那么你只会得到一个错误。例如,如果您运行:a=00.0你得到这个错误:syntaxerror,unexpectedtINTEGER当然我知道这是个小问题,但如前所述,我想了解为什么计算机不将00.0视为与0.0相同?
我有两个CSV文件存储在S3上。当我打开其中之一时,返回一个文件。当我打开另一个时,返回一个StringIO。fn1#=>"http://SOMEWHERE.s3.amazonaws.com/setup_data/d1/file1.csv"open(fn1)#=>#fn2#=>"http://SOMEWHERE.s3.amazonaws.com/setup_data/d2/d3/file2.csv"open(fn2)#=>#为什么?有没有办法用一致的数据类型打开它们?我需要将相同的数据类型String传递到CSV.read(open(file_url))中,如果有时它得到一个则它不起作
我今天在定义我解决的自定义RSpec匹配器时遇到了一个问题,但实际上看不出任何一种方法有效而另一种方法无效的原因,这是代码:方法1——if+else:RSpec::Matchers.define:have_success_messagedo|message|matchdo|page|ifmessage.nil?page.shouldhave_selector('div.alert.alert-success')elsepage.shouldhave_selector('div.alert.alert-success',text:message)endendend方法2--if后跟unl
为了用虚假数据填充我的Rails应用程序,我经常这样做:person=Person.create(:first_name=>Faker::Name.first_name,:last_name=>Faker::Name.last_name,:email=>Faker::Internet.email)这可能会产生一个像这样的人:Firstname:OliviaLastname:KuberaEmail:milan_nieklauson@bachmannjacob.net有没有办法生成更连贯的假数据,例如:Firstname:OliviaLastname:KuberaEmail:olivia_
我想按游戏日期对我的游戏进行排序,但有时游戏日期可能为空,我会得到一个异常:undefinedmethod`to_datetime'fornil:NilClass@games=@teams.reduce([]){|memo,team|memo+team.games}.sort_by(&:game_date)有什么好的方法吗? 最佳答案 如果您只想删除没有日期的条目,最简单的解决方案-ar.select(&:date).sort_by(&:date)在末尾添加nils可以用ar.select(&:date).sort_by(&:dat
以下代码会导致参数错误:n=15(n%4==0)..(n%3==0)#=>badvalueforrange(ArgumentError)我认为这是因为它评估为:false..true并且范围内使用了不同类型的类:TrueClass和FalseClass。但是,以下代码不会引发错误。这是为什么?Enumerable#collect能捕捉到它吗?(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}#=>noerror稍后添加:如果fcn返回15,则只评估范围的前半部分deffcn(x)putsx15endif(fcn(1)%4==0)..(fcn(2)