久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

詳解PHP中高精度計時器HRTime擴展

不知道大家還記得在學校的時候體育測試時老師帶的秒表嗎?當槍聲想起時,我們開始跑步,這時秒表啟動,當我們跑過終點后,老師會按下按扭記錄我們的成績,這就是一個典型的定時器的應用。今天我們要學習的內(nèi)容其實就是和這個體育測驗的秒表類似的一個功能擴展,它就是 PHP 的 HRTime 擴展。

時鐘節(jié)拍

首先我們要了解一下什么叫做系統(tǒng)的時鐘節(jié)拍。當 Linux 系統(tǒng)啟動之后,會同時啟動一個時鐘節(jié)拍器,以納秒為單位進行計時,而我們的 HRTime 擴展的真實名稱是 高精度時間 擴展。也就是說,它正是基于操作系統(tǒng)的時鐘節(jié)拍器,能夠以納秒為單位進行計時。

1秒=1000毫秒=1000000微妙=1000000000納秒,這是秒、毫秒、微秒和納秒的關系,看出來它的精度有多高了吧。1秒等于10億納秒,這樣我們就可以獲得一個非常精確的時間間隔計數(shù)。

HRTime 擴展直接在 PECL 進行下載安裝就可以了,和其他的普通擴展沒有什么區(qū)別。

獲取系統(tǒng)時鐘節(jié)拍信息 Ticks

我們先來看看如何獲取操作系統(tǒng)的時鐘節(jié)拍,也就是這個 Ticks 。關于它的內(nèi)容在學習操作系統(tǒng)的時候相信已經(jīng)有不少的同學接觸過了,這里我們看看使用 HRTime 擴展如何獲取。

print_r(hrtime()); // Array // ( //     [0] => 3758 //     [1] => 407409171 // )  echo hrtime(true), PHP_EOL; // 3758407428932

hrtime() 這個函數(shù)在 PHP7 之后已經(jīng)集成在默認 PHP 環(huán)境中了。它不需要 HRTime 擴展就可以使用。這個函數(shù)在沒有參數(shù)的情況下返回的是一個數(shù)組,第 0 項是系統(tǒng)啟動到現(xiàn)在的秒數(shù),第 1 項就是對應的納秒計數(shù)。如果給它的參數(shù)設置一個 true 的話,它將直接返回將秒和納秒拼接起來的實際納秒時間戳。

echo HRTimePerformanceCounter::getFrequency(), PHP_EOL; // 1000000000 echo HRTimePerformanceCounter::getTicks(), PHP_EOL; // 3758428256236 echo HRTimePerformanceCounter::getTicksSince(1212), PHP_EOL; // 3758428257494  $a = HRTimePerformanceCounter::getTicks(); echo HRTimePerformanceCounter::getTicksSince($a), PHP_EOL; // 412

接下來的這三個函數(shù)就是 HRTime 擴展中的 PerformanceCounter 對象的靜態(tài)函數(shù)了。PerformanceCounter 對象的意思是性能計數(shù)器,getFrequency() 表示的是計時器頻率(以滴答Ticks/秒為單位),可以看出,它返回的就是納秒單位,也就是 10億 。getTicks() 返回的是當前的時鐘節(jié)拍時間,可以看出它和 hrtime(true) 函數(shù)的結(jié)果是一樣的,都是返回的系統(tǒng)啟動后的時鐘節(jié)拍時間。getTicksSince() 方法則是根據(jù)指定的納秒數(shù)返回時間間隔,類似于 date_diff() 的感覺,其實就像我們的 time() – time() 這樣的操作。通過這個方法就可以獲得一段代碼兩次運行的時間間隔,而且是以納秒為單位哦。

定時器功能

接下來就是我們文章的重點內(nèi)容了,也就是定時器功能的實現(xiàn)。上面已經(jīng)說過,使用 getTickSince() 其實也能做到監(jiān)控一段代碼的運行時間間隔,不過下面將學習到的內(nèi)容將更加強大。

$c = new HRTimeStopWatch;  $c->start(); for ($i = 0; $i < 1024*1024; $i++); echo 'isRunning: ', $c->isRunning(), PHP_EOL; // isRunning: 1 $c->stop();  echo 'Time NS: ', $c->getLastElapsedTime(HRTimeUnit::NANOSECOND), PHP_EOL; echo 'Time US: ', $c->getLastElapsedTime(HRTimeUnit::MICROSECOND), PHP_EOL; echo 'Time MS: ', $c->getLastElapsedTime(HRTimeUnit::MILLISECOND), PHP_EOL; echo 'Time S: ', $c->getLastElapsedTime(HRTimeUnit::SECOND), PHP_EOL; // Time NS: 6929888 // Time US: 6929.888 // Time MS: 6.929888 // Time S: 0.006929888  echo 'Ticks: ',$c->getLastElapsedTicks(), PHP_EOL; // Ticks: 6929888  echo 'isRunning: ',$c->isRunning(), PHP_EOL; //

我們需要實例化一個 StopWatch 對象,然后調(diào)用它的 start() 方法,這樣一個定時器就啟動了。StopWatch 的英文涵義本身就是定時器的意思,所以這個對象是專門為定時器的操作所服務的。通過 isRunning() 方法我們可以判斷當前定時器是否運行,其實就是判斷當前是否是在一個 start() 方法之后,如果不在 start() 和 stop() 范圍中,那么它將返回 false 。在測試代碼中,我們運行一個 1024*1024 的空循環(huán),然后再使用 stop() 方法結(jié)束定時器。

從代碼中可以看出,getLastElapsedTime() 就是獲得我們上面的那個 start() 到 stop() 之間的代碼運行耗時的時間間隔信息,它的參數(shù)可以指定為秒、毫秒、微秒、納秒。本身這個方法的意思就是獲取獲取最后一個間隔的運行時間。getLastElapsedTicks() 則是獲得最后一次間隔的時鐘節(jié)拍信息。既然有【最后一次】這四個字,那么也就說明這個對象是可以多次調(diào)用的來分段計時的。并且,它還是可以將多段不同的計時進行匯總,獲得全部的時間間隔信息的。

// 不在計時范圍內(nèi) for ($i = 0; $i < 1024*1024; $i++);  $c->start(); for ($i = 0; $i < 1024*1024; $i++); $c->stop();  echo 'Time NS: ', $c->getLastElapsedTime(HRTimeUnit::NANOSECOND), PHP_EOL; echo 'Time US: ', $c->getLastElapsedTime(HRTimeUnit::MICROSECOND), PHP_EOL; echo 'Time MS: ', $c->getLastElapsedTime(HRTimeUnit::MILLISECOND), PHP_EOL; echo 'Time S: ', $c->getLastElapsedTime(HRTimeUnit::SECOND), PHP_EOL; // Time NS: 7154010 // Time US: 7154.01 // Time MS: 7.15401 // Time S: 0.00715401  echo 'All Time NS: ', $c->getElapsedTime(HRTimeUnit::NANOSECOND), PHP_EOL; echo 'All Time US: ', $c->getElapsedTime(HRTimeUnit::MICROSECOND), PHP_EOL; echo 'All Time MS: ', $c->getElapsedTime(HRTimeUnit::MILLISECOND), PHP_EOL; echo 'All Time S: ', $c->getElapsedTime(HRTimeUnit::SECOND), PHP_EOL; // All Time NS: 14083898 // All Time US: 14083.898 // All Time MS: 14.083898 // All Time S: 0.014083898  echo 'All Ticks: ', $c->getElapsedTicks(), PHP_EOL; // All Ticks: 14083898

在這段代碼中,我們在兩段計時測試代碼中插入了一個循環(huán)測試代碼,它不會計入到計時數(shù)據(jù)中。接著,我們重新 start() 開始一個新的計時,在最后,我們通過 getElapsedTime() 和 getElapsedTicks() 兩個方法獲得總的計時時間,可以看出上面的 6929888 加上這次的 7154010 結(jié)果正好是 14083898 。中間的那一段沒有在定時器中的循環(huán)代碼沒有計入到總的計時時間中。

推薦學習:《PHP視頻教程》

總結(jié)

是不是很有意思,它的作用真的和我們的體育老師所用的那個秒表一模一樣,老師們的秒表也都是可以按多次記錄第1名到最后1名的全部跑步成績,并且最后還有一個總的時間,而在代碼中我們也是完全相似的操作。這個擴展對于精細的性能調(diào)試非常有用,而且也能夠針對一些需要這種高精度時間差的業(yè)務進行相關的開發(fā)。

測試代碼: https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/3.學習PHP中的高精度計時器HRTime擴展.php 參考文檔: https://www.php.net/manual/zh/book.hrtime.php

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
精品一区视频| 亚洲天堂av资源在线观看| 国产日韩一区二区三区在线播放| 亚洲一级大片| 日本少妇一区二区| 国产精品乱战久久久| 久久精品国产精品亚洲毛片| 日本免费一区二区视频| 国产欧美日韩精品一区二区免费 | 99免费精品| 三级精品视频| 捆绑调教日本一区二区三区| 欧美1区2区3| 国产成人精品福利| 日韩国产激情| 神马久久午夜| 欧美日韩视频| 婷婷亚洲成人| 国产精品2023| 青青青免费在线视频| 精品一区在线| 亚洲91网站| 麻豆91在线播放| 私拍精品福利视频在线一区| 欧美+日本+国产+在线a∨观看| 午夜在线一区| 国产三级精品三级在线观看国产| 高清日韩中文字幕| 亚洲一级高清| 亚洲精品视频一二三区| 日韩免费精品| 国产夫妻在线| 亚洲资源av| 国产精品国产一区| 精品国产乱码久久久久久1区2匹| 欧美不卡高清一区二区三区| 亚洲欧洲午夜| 欧美欧美黄在线二区| 国产videos久久| 蜜桃视频欧美| 国产日韩在线观看视频| sm久久捆绑调教精品一区| 激情综合网站| 91精品国产自产精品男人的天堂| 狠狠久久伊人中文字幕| 亚洲成av在线| 午夜亚洲福利| 蜜桃av在线播放| 午夜一级久久| 精品不卡一区| 丝袜美腿成人在线| 美女久久精品| 欧美专区18| 国产成人久久精品麻豆二区| 欧美精品自拍| 国产精成人品2018| 伊人成人网在线看| 国产精品久久国产愉拍| 91精品福利| 欧美国产中文高清| 欧美日韩黑人| 久久精品系列| 视频在线观看一区| 中文字幕高清在线播放| 中文字幕日本一区二区| 成人自拍av| 久久狠狠久久| 亚洲永久字幕| 91av亚洲| 国产探花一区| 日韩一区二区免费看| 久久99高清| 亚洲精品第一| 亚洲特级毛片| 国产一区二区三区不卡视频网站 | 国产精品7m凸凹视频分类| 国产精品一卡| 亚洲网址在线观看| 亚洲伊人av| 欧美伊人影院| 欧美午夜不卡影院在线观看完整版免费| 国产精品久久久久久久久久久久久久久 | 蜜臀精品一区二区三区在线观看| 91亚洲自偷观看高清| 777久久精品| 亚洲综合另类| 欧美亚洲国产一区| 久久丁香四色| 日韩高清不卡在线| 欧美一级二区| 午夜一级久久| 久久uomeier| 国产精品一级在线观看| 六月丁香综合| 欧美福利专区| 国产精品精品国产一区二区| 日韩精品视频中文字幕| 午夜欧美视频| 99久久久久久中文字幕一区| 欧美1区二区| 欧美一区91| 亚洲一二三区视频| 欧美一区二区三区激情视频 | 首页欧美精品中文字幕| 欧美亚洲精品在线| 欧美日韩视频网站| 一区二区三区四区日本视频| 精品中文字幕一区二区三区四区| 欧美精品中文字幕亚洲专区| 蜜臀91精品一区二区三区| 激情欧美一区二区三区| 丝袜美腿诱惑一区二区三区 | 今天的高清视频免费播放成人| 亚洲一二av| 日韩一区二区三区免费播放| 精品久久福利| 精品视频99| 国产精品巨作av| 国产午夜精品一区在线观看| 日韩精品三级| 涩涩涩久久久成人精品| 日本大胆欧美人术艺术动态| 喷白浆一区二区| 丝袜美腿亚洲一区| 亚洲一区二区小说| 日本中文字幕视频一区| 日韩av在线免费观看不卡| 日本一区中文字幕| 91九色综合| 亚久久调教视频| 日韩高清一区二区| 91成人在线| 久久只有精品| 国产成人精品亚洲线观看 | 欧美91在线| 精品久久久网| 日韩欧美自拍| 精品久久网站| 911亚洲精品| 国产日韩免费| 久久精品国产网站| 国产粉嫩在线观看| 成人日韩av| 久久91导航| 狠狠色综合网| 亚洲精品乱码日韩| 国产精品久久| а√天堂中文在线资源8| 久久国产日本精品| 国产精品毛片| 日本一区福利在线| 国产精品99久久免费| 国产一区二区精品福利地址| 亚洲成人精品| 免费久久精品视频| 国产精品一站二站| 在线手机中文字幕| 免费不卡中文字幕在线| 男人的天堂久久精品| 国产乱码精品| 成人片免费看| 丝袜美腿亚洲一区| 国产精品a级| 1000部精品久久久久久久久| 中文日韩在线| 7m精品国产导航在线| 精品淫伦v久久水蜜桃| 久久精品高清| 日韩精品福利一区二区三区| 精品国产亚洲一区二区三区大结局| 久久精品在线| 亚洲免费毛片| 国产不卡精品| 亚洲在线免费| 国产盗摄——sm在线视频| 欧美激情视频一区二区三区免费| 日韩欧美综合| 一二三区精品| 91嫩草亚洲精品| 视频一区二区欧美| 精品三区视频| 视频一区二区中文字幕| 久久69成人| 久久国产66| 国产91欧美| 少妇精品在线| 日韩精品一区二区三区免费观影 | 国际精品欧美精品| 亚洲欧美视频| 成人一区而且| 日韩欧美久久| 亚洲高清激情| 久久一区精品| 亚洲婷婷丁香| 久久夜夜操妹子| 国产欧美日韩一区二区三区四区 | 亚洲深爱激情| 国产精品777777在线播放| 日韩亚洲国产欧美| 日韩a一区二区|