1. 程式人生 > >Golang 實現守護主程序

Golang 實現守護主程序

     package main

        import (
            "fmt"
            "runtime"
            "sync"
            "time"
        )

        func test_goroutine()  {
            fmt.Println("函式被執行了*************************")
        }

        func main()  {

            // 測試多核並行化
            // 在執一些昂貴的計算任務時,如果希望使用伺服器的多核特性來儘量將任務實現並行化,從而達到降低總計算時間的目的
            
// 當前Golang版本並不能智慧地發現和利用多核優勢,如果不進行特殊宣告,實際上所有的goroutine都執行在一個CPU核心上, // 當一個goroutine得到時間片執行的時候,其他goroutine都會處於等待狀態. // 在Golang升級到預設支援多個CPU之前,我們可以先通過設定環境變數GOMAXPROCS的值, 或者在程式碼中啟動goroutine之前 // 先呼叫相應的方法設定使用多少個CPU核心 // 獲取cpu核心數 num_cpu := runtime.NumCPU()
// 設定使用的cpu的核心數 runtime.GOMAXPROCS(num_cpu) // 使用sync包實現 var wg sync.WaitGroup // 獲取執行任務前的時間戳 start_time := time.Now().Unix() for i:=0; i<=3200000; i++{ wg.Add(1) //新增WaitGroup計數器 go func() { defer wg.Done()
//defer標記當前函式作用域執行結束後 釋放一個計數器,必須有這一步操作 fmt.Println("函式被執行了*************************") }() } wg.Wait() //阻塞,直到WaitGroup中的計數器為0 // 獲取執行完成任務後的時間戳 end_time := time.Now().Unix() fmt.Println(end_time-start_time) // 測試發現當進行簡單的計算時,使用多核心和使用單核心執行時間上並沒有出現差距, 資源的分配會出現時間損耗 // 簡單的計算不建議使用多核cpu進行高併發, 當進行昂貴複雜的計算最好經過充分的測試, 使用合適的核心數進行併發執行任務 }