91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

golang中并發和并行的示例分析

發布時間:2021-05-08 12:53:17 來源:億速云 閱讀:177 作者:小新 欄目:開發技術

這篇文章主要介紹了golang中并發和并行的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

什么是golang

golang 是Google開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言,其語法與 C語言相近,但并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能。

golang中默認使用一個CPU,這時程序無法并發,只能是并發。因為始終只有一個CPU在運行。

package main 
import (
        "fmt"
        "runtime"
)
 
//并發和并行
var quit chan int = make(chan int) 
func loop() {
        for i := 0; i < 100; i++ { //為了觀察,跑多些
                fmt.Printf("%d ", i)
        }
        quit <- 0
}
 
func main() {
        runtime.GOMAXPROCS(2) // 最多使用2個核
 
        go loop()
        go loop()
 
        for i := 0; i < 2; i++ {
                <- quit
        }
}

runtime.GOMAXPROCS(2) 設置使用2個CPU,這才真正是并行。

補充:Go多核并行化

通過goroutine創建相同邏輯CPU核心個數的協程,將求和列表分段,分別計算后匯總。

通過runtime.NUMCPU()獲得邏輯CPU個數,并計算每個協程中計算列表的下標,計算完成后,向channel中寫入1。

通過向channel中讀取int的個數,判斷協程運行是否全部完成,之后求和即可。

package main
import (
	"fmt"
	"runtime"
)
type Vector []float64
func (v Vector) DoSome(p, i, n int, u Vector, c chan int) {
	sum := 0.0
	for ; i < n; i++ {
		sum += u[i]
	}
	v[p] = sum
	c <- 1
}
const NCPU = 4
func (v Vector) DoAll(u Vector) {
	c := make(chan int, NCPU)
	for i := 0; i < NCPU; i++ {
		fmt.Println(i, i*len(u)/NCPU, (i+1)*len(u)/NCPU)
		go v.DoSome(i, i*len(u)/NCPU, (i+1)*len(u)/NCPU, u, c)
	}
	for i := 0; i < NCPU; i++ {
		<-c
	}
	sum := 0.0
	for _, value := range v {
		sum += value
	}
	fmt.Println(sum)
}
func main() {
	u := make([]float64, 64)
	for i := 0; i < 64; i++ {
		u[i] = float64(i)
	}
	var v Vector = make([]float64, NCPU)
	v.DoAll(u)
	ncpu := runtime.NumCPU()
	fmt.Println(ncpu)
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“golang中并發和并行的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

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

AI

东兴市| 丽江市| 和龙市| 都江堰市| 湘潭县| 大埔县| 武穴市| 上杭县| 民勤县| 利辛县| 东丽区| 茂名市| 土默特左旗| 嘉义县| 宁乡县| 施秉县| 奇台县| 新民市| 汤原县| 越西县| 巴青县| 平顺县| 拜泉县| 肇州县| 偃师市| 芜湖县| 上栗县| 南宫市| 临潭县| 施秉县| 金华市| 托里县| 湘乡市| 永宁县| 正阳县| 陈巴尔虎旗| 乌什县| 五河县| 汨罗市| 紫阳县| 龙游县|