主頁 > 知識庫 > golang中的并發(fā)和并行

golang中的并發(fā)和并行

熱門標(biāo)簽:電話機器人軟件免費 評價高的400電話辦理 涿州代理外呼系統(tǒng) 壽光微信地圖標(biāo)注 百度地圖標(biāo)注后傳給手機 外呼系統(tǒng)用什么卡 excel地圖標(biāo)注分布數(shù)據(jù) 外呼系統(tǒng)顯本地手機號 阿克蘇地圖標(biāo)注

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

package main 
import (
        "fmt"
        "runtime"
)
 
//并發(fā)和并行
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) 設(shè)置使用2個CPU,這才真正是并行。

補充:Go多核并行化

通過goroutine創(chuàng)建相同邏輯CPU核心個數(shù)的協(xié)程,將求和列表分段,分別計算后匯總。

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

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

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)
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 關(guān)于golang高并發(fā)的實現(xiàn)與注意事項說明
  • 基于Golang 高并發(fā)問題的解決方案
  • 使用golang編寫一個并發(fā)工作隊列
  • golang 并發(fā)編程之生產(chǎn)者消費者詳解
  • Golang 并發(fā)以及通道的使用方式
  • 快速解決Golang Map 并發(fā)讀寫安全的問題
  • 淺談golang并發(fā)操作變量安全的問題

標(biāo)簽:欽州 汕頭 重慶 銅川 吐魯番 梅河口 蘭州 雞西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang中的并發(fā)和并行》,本文關(guān)鍵詞  golang,中的,并發(fā),和,并行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang中的并發(fā)和并行》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang中的并發(fā)和并行的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章