第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

Go 入門(mén)教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類(lèi)型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類(lèi)型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類(lèi)型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類(lèi)型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能

Go 語(yǔ)言性能測(cè)試

本文來(lái)學(xué)習(xí)一下如何進(jìn)行 Go 語(yǔ)言的性能測(cè)試。這里需要學(xué)習(xí)一個(gè) Go 語(yǔ)言官方提供的工具 pprof:

  • runtime/pprof:采集程序(非 Server)的運(yùn)行數(shù)據(jù)進(jìn)行分析;
  • net/http/pprof:采集 HTTP Server 的運(yùn)行時(shí)數(shù)據(jù)進(jìn)行分析。

上述兩個(gè)包的底層實(shí)現(xiàn)是一樣的,一般建議直接在主函數(shù)上加上 http 服務(wù)而使用第二個(gè)包,畢竟可視化顯示易于觀察和操作。故本文僅介紹 net/http/pprof 的用法。

1. pprof 使用方法

直接在程序入口,也就是 main 函數(shù)所在的文件中導(dǎo)入 pprof。

 import _ "net/http/pprof"

示例代碼如下:

package main

import (
    "fmt"
    "net/http"
    _ "net/http/pprof"
    "time"
)

func main() {
    //打印數(shù)字
    go printNum()
    //打印字符
    go printChar()
    http.ListenAndServe("0.0.0.0:9300", nil)//啟動(dòng)一個(gè)服務(wù)用于查看性能分析可視化頁(yè)面
}
func printChar() {
    for i := '0'; ; i++ {
        fmt.Println("printChar:", string(i))
        time.Sleep(time.Second)
    }
}
func printNum() {
    for i := 0; ; i++ {
        fmt.Println("printNum:", i)
        time.Sleep(time.Second)
    }
}

上述代碼啟動(dòng),pprof 會(huì)在這個(gè)服務(wù)上自動(dòng)創(chuàng)建路由:

debug/pprof/

在瀏覽器中輸入127.0.0.1:9300/debug/pprof/,會(huì)出現(xiàn)如下頁(yè)面:

圖片描述

這個(gè)路由下還有幾個(gè)子頁(yè)面:

  • allocs:內(nèi)存分配情況;
  • block:獲取導(dǎo)致阻塞的 goroutine 堆棧(如 channel, mutex 等);
  • cmdline:當(dāng)前程序激活的命令行啟動(dòng)參數(shù);
  • goroutine:當(dāng)前當(dāng)前運(yùn)行的 goroutine 的堆棧信息;
  • heap:存活對(duì)象的內(nèi)存分配情況;
  • mutex :互斥鎖的競(jìng)爭(zhēng)持有者的堆棧跟蹤;
  • profile:默認(rèn)進(jìn)行 30s 的 CPU Profiling,得到一個(gè)分析用的 profile 文件;
  • threadcreate:操作系統(tǒng)線程跟蹤;
  • trace:得到一個(gè)分析用的 trace 文件。

2. 使用工具分析 profile 和 trace

當(dāng)在127.0.0.1:9300/debug/pprof/中點(diǎn)擊 profile 和 trace 時(shí)會(huì)分別得到一個(gè)文件,我們可以使用 Go 語(yǔ)言自帶的工具對(duì)這兩個(gè)文件進(jìn)行解析。在解析之前,需要編譯得到程序代碼的可執(zhí)行文件,配合分析文件使用。

2.1 解析 profile

使用如下命令行進(jìn)入解析頁(yè)面:

go tool pprof .\firstgo.exe .\profile

執(zhí)行結(jié)果:

圖片描述

如上如所示,我們進(jìn)入了 pprof 的命令行界面,可以輸入top來(lái)查看前 10 行數(shù)的 CPU 占用情況:

圖片描述

  • flat:采樣頻率(10ms);
  • flat%:采樣頻率(10ms)下,CPU 運(yùn)行耗時(shí)總比例;
  • sum%:給定函數(shù)累積使用 CPU 總比例,如第二行 sum% =40.00% = 20.00% + 20.00%;
  • cum:當(dāng)前函數(shù)加上它之上的調(diào)用運(yùn)行總耗時(shí),包括函數(shù)等待子函數(shù)返回;
  • cum%:CPU 運(yùn)行耗時(shí)總比例;
  • 最后一列為函數(shù)名稱(chēng)。

還可使用 help 指令來(lái)查看 pprof 所有操作,讀者可以自行探索。

2.2 解析 trace

使用如下命令解析 trace 文件:

go tool trace .\firstgo.exe  .\trace

此時(shí)會(huì)自動(dòng)打開(kāi)一個(gè) web 頁(yè)面:

圖片描述

  • View trace:查看跟蹤;
  • Goroutine analysis:Goroutine 分析;
  • Network blocking profile:網(wǎng)絡(luò)阻塞概況;
  • Synchronization blocking profile:同步阻塞概況;
  • Syscall blocking profile:系統(tǒng)調(diào)用阻塞概況;
  • Scheduler latency profile:調(diào)度延遲概況;
  • User defined tasks:用戶自定義任務(wù);
  • User defined regions:用戶自定義區(qū)域;
  • Minimum mutator utilization:最低 Mutator 利用率。

我們可以看到有的鏈接后面跟著(?),是因?yàn)檫@些鏈接的使用需要配合第三方工具,可以點(diǎn)進(jìn)去查看缺失的內(nèi)容,下載安裝后就可以使用了,一般使用前兩個(gè)就可以分析程序的執(zhí)行情況了。

3. 小結(jié)

本文主要介紹了 Go 語(yǔ)言自帶的工具 pprof 的用法,以及其生成分析文件的解析。需要注意的是每個(gè)分析文件都要配合這個(gè)程序的可執(zhí)行文件使用。還有就是建議大家在開(kāi)發(fā)過(guò)程中盡量時(shí)不時(shí)的用一下 pprof,可以使開(kāi)發(fā)出來(lái)的程序更穩(wěn)定更高效。