golang多核的應(yīng)用

golang默認使用單核單線程,可以通過調(diào)整或設(shè)置運行參數(shù)設(shè)置多核多線程支持

目前創(chuàng)新互聯(lián)建站已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、三山網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

runtime.GOMAXPROCS(int)
runtime.GOMAXPROCS(runtime.NumCPU())
直接設(shè)置環(huán)境變量$GOMAXPROCS

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

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

現(xiàn)在我們用一簡單的程序來說明下:

package mainimport (
        "runtime"
        "fmt"
        "sync"
        "database/sql"
        _ "github.com/go-sql-driver/MySQL"
	"time")//定義任務(wù)隊列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() //任務(wù)完成,將任務(wù)隊列中的任務(wù)數(shù)量-1,其實.Done就是.Add(-1)}func main() {
	//記錄開始時間
	start := time.Now()
        //設(shè)置最大的可同時使用的CPU核數(shù)和實際cpu核數(shù)一致
        runtime.GOMAXPROCS(1)
        for i := 1; i <= 10; i++ {
                waitgroup.Add(1) //每創(chuàng)建一個goroutine,就把任務(wù)隊列中任務(wù)的數(shù)量+1
                go xtgxiso(i)
        }
        waitgroup.Wait() //Wait()這里會發(fā)生阻塞,直到隊列中所有的任務(wù)結(jié)束就會解除阻塞
	//記錄結(jié)束時間
	end :=  time.Now()
	//輸出執(zhí)行時間,單位為秒。
	fmt.Println(end.Sub(start).Seconds())}

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

以上就是golang如何利用多核的詳細內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

網(wǎng)頁題目:golang多核的應(yīng)用
文章位置:http://muchs.cn/article6/jpeeog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、網(wǎng)站內(nèi)鏈網(wǎng)站排名、自適應(yīng)網(wǎng)站、虛擬主機

廣告

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

網(wǎng)站建設(shè)網(wǎng)站維護公司