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

站長資訊網
最全最豐富的資訊網站

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

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

時鐘節拍

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

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

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

獲取系統時鐘節拍信息 Ticks

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

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

hrtime() 這個函數在 PHP7 之后已經集成在默認 PHP 環境中了。它不需要 HRTime 擴展就可以使用。這個函數在沒有參數的情況下返回的是一個數組,第 0 項是系統啟動到現在的秒數,第 1 項就是對應的納秒計數。如果給它的參數設置一個 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

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

定時器功能

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

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

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

// 不在計時范圍內 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

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

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

總結

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

測試代碼: 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)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
亚洲精品综合| 日韩国产一区| 麻豆成全视频免费观看在线看| 91成人福利| 中文无码日韩欧| 亚洲专区一区| 亚洲福利免费| 亚洲爱爱视频| 日韩av免费大片| 精品在线网站观看| 鲁大师成人一区二区三区| 韩国精品主播一区二区在线观看| 精品国产亚洲日本| 精品资源在线| 国产精品一区二区三区av| 亚洲+小说+欧美+激情+另类| 亚洲成人三区| 日韩午夜av| 亚洲在线网站| 伊人成人在线视频| 激情综合网五月| 在线视频观看日韩| 国产一区亚洲| 不卡一区2区| 久久高清一区| 亚洲激情社区| 老鸭窝亚洲一区二区三区| 视频一区二区三区在线| 午夜日韩在线| 美女黄网久久| 免费一级片91| 日韩一二三区在线观看| 日本一不卡视频| 午夜久久av| 欧美日本不卡| 欧美精品导航| 久久人人精品| 少妇精品久久久一区二区| 久久国产中文字幕| 中文字幕中文字幕精品| 亚洲欧美日韩国产一区二区| 91精品一区二区三区综合| 亚洲高清av| 国产一区91| 亚洲精品国产日韩| 国产精品免费大片| 在线天堂资源www在线污| 久久中文字幕av| 91tv亚洲精品香蕉国产一区| 国产亚洲午夜| 欧美日韩va| 日韩综合精品| 怡红院精品视频在线观看极品| 免费观看在线综合| 91精品尤物| 欧美精品导航| 韩国三级一区| 日韩中文字幕av电影| 麻豆视频一区二区| 91精品福利| 国产日产一区| 久久一区国产| 蜜芽一区二区三区| 国产精品99久久免费观看| 日韩欧美1区| 日韩一区二区三区免费视频| 国产成人精品一区二区免费看京| 亚洲a在线视频| 欧美亚洲综合视频| 久久九九电影| 美国三级日本三级久久99| 伊人网在线播放| 亚洲日本在线观看视频| 成人在线超碰| 91嫩草精品| 日韩欧美字幕| 欧美日韩免费观看一区=区三区| 欧美亚洲一级| 九九久久电影| 国产精品yjizz视频网| 国产一区91| 精品黄色一级片| 日韩av黄色在线| 久久免费黄色| 日本不卡免费高清视频在线| 日本精品国产| 999久久久国产精品| 国产精品一区二区三区www| 欧美日韩视频网站| 99成人超碰| 麻豆视频一区| 伊人成人网在线看| 欧美国产极品| 亚洲精品自拍| 丝袜美腿成人在线| 久久在线电影| 日韩成人亚洲| 国产成人黄色| 久久99国产精品视频| 国产欧美日韩精品一区二区免费| 一区二区三区网站| 999精品在线| 中文字幕在线看片| 国产在视频一区二区三区吞精| 国产亚洲观看| 国产欧美一区二区三区精品观看 | 国产免费成人| 激情综合在线| 99视频精品全国免费| 日韩久久电影| 精品淫伦v久久水蜜桃| 国产欧美一区二区色老头| 免费在线观看成人| 男女精品网站| 首页亚洲欧美制服丝腿| 亚洲主播在线| 一区二区电影| 亚洲欧洲美洲国产香蕉| 少妇精品久久久一区二区| 亚洲日韩中文字幕一区| 亚洲三级网站| 97久久精品| 国产精品亚洲综合久久| 国产精品s色| 国产一区日韩| 日韩在线短视频| 久久久久国产精品一区二区| 欧美三级网址| 99久久夜色精品国产亚洲狼 | 欧美在线亚洲综合一区| 午夜欧美精品久久久久久久| 国产精品人人爽人人做我的可爱| 视频一区在线视频| 亚洲精选成人| 国产日韩三级| 精品久久久中文字幕| 日本美女一区| 一区三区视频| 日韩在线成人| 日韩一区网站| 国产精品一卡| 久久影院午夜精品| 99视频+国产日韩欧美| 亚洲精品欧美| 久久精品国产网站| 国产精品久久久久av电视剧| 视频一区中文| 日韩精品一区二区三区中文字幕| 国产欧美69| 日韩在线短视频| 亚洲一区二区三区四区五区午夜| 中文字幕一区二区三区在线视频| 欧美久久亚洲| 成人午夜亚洲| 99视频精品视频高清免费| 日本大胆欧美人术艺术动态| 91p九色成人| 国产传媒av在线| 久久高清一区| 欧美极品中文字幕| 欧美 日韩 国产精品免费观看| 尤物网精品视频| 日韩激情精品| 97精品在线| 日本大胆欧美人术艺术动态| 国产免费久久| 欧美日韩一二三四| 日韩高清三区| av亚洲一区二区三区| 亚洲黑丝一区二区| 亚洲精品在线a| 亚洲精品**中文毛片| 视频精品一区二区| 高清一区二区| 亚洲精选久久| 国产精品久久久久久久久久10秀| 欧美日韩免费观看一区=区三区 | 精品国产乱码久久久| 自拍日韩欧美| 国产精品一区二区三区www| 日韩三区免费| 一本色道久久精品| 91精品一区国产高清在线gif | 日韩精品免费一区二区三区| 亚洲色图国产| 国产白浆在线免费观看| 免费精品视频最新在线| 国产一区福利| 亚欧成人精品| 在线成人动漫av| 久久av网站| 蜜桃一区二区三区| 国产亚洲电影| 亚洲深夜影院| 98精品视频| 欧美日韩精品一区二区三区在线观看| 久久影视一区| 你懂的亚洲视频| 亚洲一区二区三区在线免费| 亚洲成人精品|