中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang多核的應用

發布時間:2020-06-09 14:28:17 來源:億速云 閱讀:239 作者:鴿子 欄目:編程語言

golang默認使用單核單線程,可以通過調整或設置運行參數設置多核多線程支持

runtime.GOMAXPROCS(int)
runtime.GOMAXPROCS(runtime.NumCPU())
直接設置環境變量$GOMAXPROCS

Go從1.5版本開始,默認采用多核執行,默認是你的CPU核心數,以前版本默認為1

那么我們在什么情況下應該用多核心來加速程序,而在什么情況下用單核即可呢?

現在我們用一簡單的程序來說明下:

package mainimport (
        "runtime"
        "fmt"
        "sync"
        "database/sql"
        _ "github.com/go-sql-driver/mysql"
	"time")//定義任務隊列var waitgroup sync.WaitGroupfunc xtgxiso(num int) {
        //fmt.Println(num)
        db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
        if err != nil {
                fmt.Println(err)
        }
        defer db.Close()
        rows, err := db.Query("select sleep(1) as a")
        if err != nil {
                fmt.Println(err)
        }
        defer rows.Close()
        var a string
        for rows.Next() {
                err = rows.Scan(&a)
                if err != nil {
                        fmt.Println(err)
                } else {
                        //fmt.Println(a)
                }
        }
        waitgroup.Done() //任務完成,將任務隊列中的任務數量-1,其實.Done就是.Add(-1)}func main() {
	//記錄開始時間
	start := time.Now()
        //設置最大的可同時使用的CPU核數和實際cpu核數一致
        runtime.GOMAXPROCS(1)
        for i := 1; i <= 10; i++ {
                waitgroup.Add(1) //每創建一個goroutine,就把任務隊列中任務的數量+1
                go xtgxiso(i)
        }
        waitgroup.Wait() //Wait()這里會發生阻塞,直到隊列中所有的任務結束就會解除阻塞
	//記錄結束時間
	end :=  time.Now()
	//輸出執行時間,單位為秒。
	fmt.Println(end.Sub(start).Seconds())}

這個程序是執行十次”select sleep(1) as a“.如果是順序阻塞執行的話,執行時間肯定是10s以上,而我們用的協程不會有這種情況。我們可以修改“runtime.GOMAXPROCS(1)”來設置是單核還是多核心執行。

以上就是golang如何利用多核的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿迁市| 平阴县| 南木林县| 吴桥县| 鄂托克前旗| 璧山县| 泰安市| 晋州市| 大渡口区| 扬州市| 金塔县| 峨眉山市| 禹城市| 东乡族自治县| 佛教| 吕梁市| 祁阳县| 西畴县| 霍林郭勒市| 营山县| 陕西省| 噶尔县| 新巴尔虎左旗| 肥乡县| 鄂托克前旗| 扶沟县| 蒙阴县| 福安市| 玉田县| 阿克苏市| 黑水县| 香格里拉县| 钟山县| 饶河县| 湘西| 濮阳市| 喀喇沁旗| 太白县| 晋江市| 青川县| 西盟|