最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年05月08日 11:13:56   作者:盼盼編程  
這篇文章主要介紹了golang中的并發(fā)和并行用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

golang中默認(rèn)使用一個CPU,這時程序無法并發(fā),只能是并發(fā)。因?yàn)槭冀K只有一個CPU在運(yùn)行。

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,這才真正是并行。

補(bǔ)充:Go多核并行化

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

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

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

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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:

相關(guān)文章

  • go語言打包的網(wǎng)頁wasm示例詳解

    go語言打包的網(wǎng)頁wasm示例詳解

    這篇文章主要為大家介紹了go打包網(wǎng)頁wasm示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-09-09
  • Golang獲取當(dāng)前時間代碼

    Golang獲取當(dāng)前時間代碼

    本文給大家匯總介紹了golang中的相關(guān)的時間的操作,有需要的小伙伴可以拿走參考下
    2018-10-10
  • golang import自定義包方式

    golang import自定義包方式

    這篇文章主要介紹了golang import自定義包方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    這篇文章主要介紹了詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • go語言中decimal的用法詳解

    go語言中decimal的用法詳解

    本文主要介紹了go語言中decimal的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 淺析Go語言中的同步與異步處理

    淺析Go語言中的同步與異步處理

    在開發(fā)過程中,當(dāng)需要同時處理多個操作時,開發(fā)者經(jīng)常面臨同步和異步兩種處理方式的選擇,下面小編就來和大家詳細(xì)介紹一下Go語言中的同步與異步處理吧
    2023-11-11
  • Golang設(shè)計(jì)模式中抽象工廠模式詳細(xì)講解

    Golang設(shè)計(jì)模式中抽象工廠模式詳細(xì)講解

    抽象工廠模式用于生成產(chǎn)品族的工廠,所生成的對象是有關(guān)聯(lián)的。如果抽象工廠退化成生成的對象無關(guān)聯(lián)則成為工廠函數(shù)模式。比如本例子中使用RDB和XML存儲訂單信息,抽象工廠分別能生成相關(guān)的主訂單信息和訂單詳情信息
    2023-01-01
  • golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能

    golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能

    這篇文章主要介紹了golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能,文章通過golang導(dǎo)出excel文件返回給web,實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • 詳解Go語言中單鏈表的使用

    詳解Go語言中單鏈表的使用

    鏈表由一系列結(jié)點(diǎn)(鏈表中每一個元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時動態(tài)生成。本文將通過實(shí)例為大家詳解Go語言中單鏈表的常見用法,感興趣的可以了解一下
    2022-08-08
  • Go中的?=?和?:=?區(qū)別小結(jié)

    Go中的?=?和?:=?區(qū)別小結(jié)

    在Go語言編程中,"="用于給已聲明的變量賦值,而":="同時聲明并初始化變量,只能在函數(shù)內(nèi)使用,理解這兩者的不同,有助于編寫更清晰的代碼,下面就來介紹一下
    2024-10-10

最新評論

莱西市| 来安县| 玉门市| 宜城市| 吴堡县| 望奎县| 侯马市| 开江县| 和龙市| 松原市| 绵阳市| 涟水县| 恩平市| 于田县| 临沭县| 上思县| 瓮安县| 东光县| 诏安县| 昭觉县| 泾源县| 屏东县| 通山县| 噶尔县| 车险| 金华市| 綦江县| 开远市| 孟连| 浪卡子县| 富蕴县| 贵德县| 金堂县| 封丘县| 临沂市| 安国市| 两当县| 新龙县| 呼玛县| 泾川县| 无为县|