Go語(yǔ)言如何獲取函數(shù)執(zhí)行時(shí)間

這篇文章主要介紹了Go語(yǔ)言如何獲取函數(shù)執(zhí)行時(shí)間的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Go語(yǔ)言如何獲取函數(shù)執(zhí)行時(shí)間文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、碌曲網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為碌曲等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

在Go語(yǔ)言中,可以使用time包中的Since()函數(shù)來(lái)獲取函數(shù)執(zhí)行時(shí)間。在函數(shù)執(zhí)行之前設(shè)置一個(gè)起始時(shí)間,并在函數(shù)運(yùn)行結(jié)束時(shí)獲取從起始時(shí)間到現(xiàn)在的時(shí)間間隔,這個(gè)時(shí)間間隔就是函數(shù)的執(zhí)行時(shí)間;而函數(shù)執(zhí)行時(shí)間可以使用time.Since()函數(shù)計(jì)算,語(yǔ)法“time.Since(t)”,會(huì)返回從t到現(xiàn)在經(jīng)過(guò)的時(shí)間。

使用time.Since計(jì)算執(zhí)行時(shí)間

函數(shù)的運(yùn)行時(shí)間的長(zhǎng)短是衡量這個(gè)函數(shù)性能的重要指標(biāo),特別是在對(duì)比和基準(zhǔn)測(cè)試中,要得到函數(shù)的運(yùn)行時(shí)間,最簡(jiǎn)單的辦法就是在函數(shù)執(zhí)行之前設(shè)置一個(gè)起始時(shí)間,并在函數(shù)運(yùn)行結(jié)束時(shí)獲取從起始時(shí)間到現(xiàn)在的時(shí)間間隔,這個(gè)時(shí)間間隔就是函數(shù)的運(yùn)行時(shí)間。

在Go語(yǔ)言中我們可以使用 time 包中的 Since() 函數(shù)來(lái)獲取函數(shù)的運(yùn)行時(shí)間,Go語(yǔ)言官方文檔中對(duì) Since() 函數(shù)的介紹是這樣的。

func Since(t Time) Duration

Since() 函數(shù)返回從 t 到現(xiàn)在經(jīng)過(guò)的時(shí)間,等價(jià)于time.Now().Sub(t)。

示例1:使用 Since() 函數(shù)獲取函數(shù)的運(yùn)行時(shí)間

package main
import (
    "fmt"
    "time"
)
func test() {
    start := time.Now() // 獲取當(dāng)前時(shí)間
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum++
    }
    elapsed := time.Since(start)
    fmt.Println("該函數(shù)執(zhí)行完成耗時(shí):", elapsed)
}
func main() {
    test()
}

運(yùn)行結(jié)果如下所示:

該函數(shù)執(zhí)行完成耗時(shí): 39.8933ms

上面我們提到了 time.Now().Sub() 的功能類(lèi)似于 Since() 函數(shù),想要使用 time.Now().Sub() 獲取函數(shù)的運(yùn)行時(shí)間只需要把我們上面代碼的第 14 行簡(jiǎn)單修改一下就行。

示例2:使用 time.Now().Sub() 獲取函數(shù)的運(yùn)行時(shí)間

package main
import (
    "fmt"
    "time"
)
func test() {
    start := time.Now() // 獲取當(dāng)前時(shí)間
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum++
    }
    elapsed := time.Now().Sub(start)
    fmt.Println("該函數(shù)執(zhí)行完成耗時(shí):", elapsed)
}
func main() {
    test()
}

運(yùn)行結(jié)果如下所示:

該函數(shù)執(zhí)行完成耗時(shí): 36.8769ms

由于計(jì)算機(jī) CPU 及一些其他因素的影響,在獲取函數(shù)運(yùn)行時(shí)間時(shí)每次的結(jié)果都有些許不同,屬于正?,F(xiàn)象。

擴(kuò)展知識(shí):使用time.Now().Sub()計(jì)算時(shí)間差

我們只需將time.Since()替換成 time.Now().Sub() 即可,如下:

    start := time.Now() // 獲取當(dāng)前時(shí)間
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum++
    }
    elapsed := time.Now().Sub(start)
    fmt.Println(elapsed)

其實(shí)time.Since內(nèi)部調(diào)用了Sub函數(shù),我們進(jìn)入time包看,注釋的意思是,Since返回從t開(kāi)始經(jīng)過(guò)的時(shí)間, time.Since 是 time.Now().Sub(t) 的簡(jiǎn)寫(xiě)方式,

\src\time\time.go 923:6

// Since returns the time elapsed since t.
// It is shorthand for time.Now().Sub(t).
func Since(t Time) Duration {
    var now Time
    if t.wall&hasMonotonic != 0 {
        // Common case optimization: if t has monotonic time, then Sub will use only it.
        now = Time{hasMonotonic, runtimeNano() - startNano, nil}
    } else {
        now = Now()
    }
    return now.Sub(t)
}

當(dāng)我們也可以使用 time.Now().Sub(start).Seconds()獲取經(jīng)過(guò)多少秒,Hours獲取經(jīng)過(guò)的小時(shí)數(shù)等,對(duì)應(yīng)的也可以簡(jiǎn)寫(xiě)為time.Since(start).Seconds()、time.Since(start).Seconds()等。

關(guān)于“Go語(yǔ)言如何獲取函數(shù)執(zhí)行時(shí)間”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Go語(yǔ)言如何獲取函數(shù)執(zhí)行時(shí)間”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:Go語(yǔ)言如何獲取函數(shù)執(zhí)行時(shí)間
URL網(wǎng)址:http://www.muchs.cn/article32/jiogpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)標(biāo)簽優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)面包屑導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名