久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      golang如何利用多核

      golang如何利用多核

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

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

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

      那么我們?cè)谑裁辞闆r下應(yīng)該用多核心來(lái)加速程序,而在什么情況下用單核即可呢?

      現(xiàn)在我們用一簡(jiǎn)單的程序來(lái)說(shuō)明下:

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

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

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)