欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > go等待一組協(xié)程結(jié)束的操作方式

go等待一組協(xié)程結(jié)束的操作方式

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

go提供了sync包和channel來解決協(xié)程同步和通訊。

方式1:

sync.WaitGroup是等待一組協(xié)程結(jié)束,sync.WaitGroup只有3個方法,Add()添加一個計數(shù),Done()減去一個計數(shù),Wait()阻塞直到所有任務完成。

package main
import (
	"fmt"
	"sync"
	"time"
)
var wg sync.WaitGroup //定義一個同步等待的組
func task(i int){
	fmt.Println("task...",i)
	//耗時操作任務,網(wǎng)絡(luò)請求,讀取文件
	time.Sleep(time.Second)
	wg.Done() //減去一個計數(shù)
}
func main(){
	for i:= 0;i10;i++{
		wg.Add(1) //添加一個計數(shù)
		go task(i)
	}
	wg.Wait() //阻塞直到所有任務完成
	fmt.Println("over")
}

運行結(jié)果:

task... 9

task... 4

task... 6

task... 0

task... 7

task... 5

task... 1

task... 2

task... 8

task... 3

over

方式2:

利用緩沖信道channel協(xié)程之間通訊,其阻塞等待功能實現(xiàn)等待一組協(xié)程結(jié)束,不能保證其goroutine按照順序執(zhí)行

package main
import (
 "fmt"
)
var ch = make(chan int,10)
func task(i int){
 fmt.Println("task...",i)
 ch - i
}
func main(){
 for i:= 0;i10;i++{
  go task(i)
 }
 for i:= 0;i10;i++{
  - ch
 } 
 fmt.Println("over")
}

運行結(jié)果:

task... 9

task... 0

task... 1

task... 2

task... 6

task... 7

task... 3

task... 4

task... 8

task... 5

over

方式3:

利用無緩沖的信道channel協(xié)程之間通訊,其阻塞等待功能實現(xiàn)等待一組協(xié)程結(jié)束,保證了其goroutine按照順序執(zhí)行

package main
import (
 "fmt"
 "time"
)
var ch = make(chan int)
func task(i int){
 fmt.Println("task...",i)
 time.Sleep(time.Second)
  - ch
}
func main(){
 for i:= 0;i10;i++{
  go task(i)
  ch - i
 }
 fmt.Println("over")
}

運行結(jié)果:

task... 0

task... 1

task... 2

task... 3

task... 4

task... 5

task... 6

task... 7

task... 8

task... 9

over

補充:Go中使用Channel等待所有協(xié)程結(jié)束

讓main方法等待所有協(xié)程執(zhí)行完畢再退出。可能一般思路是設(shè)置一個共有變量,然后通過修改這個變量的狀態(tài)。這是通過共享變量來通信的方式,而go要做的是,通過通信來共享內(nèi)存。

1. 按順序執(zhí)行

每次通信進行成對通信,當main向協(xié)程發(fā)送一個寫channel時,同時也等待協(xié)程返回一個讀channel。

這兩個channel一定是成對的,所以構(gòu)造一個結(jié)構(gòu)體

type worker struct {
    in chan int
    done chan bool
}
 
func chanDemo1(){
    var workers [10]worker 
    for i := 0; i  10; i++ {
        workers[i] = createWorker1(i)
    }
 
    for i := 0; i  10; i++ {
        workers[i].in - 'a' + i
        - workers[i].done
    }
 
    for i := 0; i  10; i++ {
        workers[i].in - 'A' + i
        - workers[i].done
    } 
}
 
func createWorker1(id int) worker {
    work := worker{
        in: make(chan int),
        done: make(chan bool),
    }
    go func() {
        for {
            fmt.Printf("Work %d receiverd %c\n", id, - work.in)
            work.done - true
        }
    }()
    return  work
} 
 
func main(){
    chanDemo1()
    fmt.Println("over")
}

這個執(zhí)行結(jié)果完全是按照0-9,先小寫再大寫的順序

如果這樣順序執(zhí)行,還要協(xié)程干啥

2. 批量處理

type worker struct {
    in chan int
    done chan bool
}
 
func chanDemo1(){
    var workers [10]worker
    for i := 0; i  10; i++ {
        workers[i] = createWorker1(i)
    }
    for i := 0; i  10; i++ {
        workers[i].in - 'a' + i
    }
    for _, worker  := range workers {
        - worker.done
    }
    for i := 0; i  10; i++ {
        workers[i].in - 'A' + i
    }
    for _, worker  := range workers {
        - worker.done
    }
}
 
func createWorker1(id int) worker {
    work := worker{
        in: make(chan int),
        done: make(chan bool),
    }
    go func() {
        for {
            fmt.Printf("Work %d receiverd %c\n", id, - work.in)
            work.done - true
        }
    }()
    return  work
}

這樣的話,先打印小寫,再打印大寫,但是大小寫時順序不固定

3. 完全隨機

func chanDemo1(){
    var workers [10]worker
    for i := 0; i  10; i++ {
        workers[i] = createWorker1(i)
    }
    for i := 0; i  10; i++ {
        workers[i].in - 'a' + i
    }
 
    for i := 0; i  10; i++ {
        workers[i].in - 'A' + i
    }
    for _, worker  := range workers {
        - worker.done
        - worker.done
    }
}
 
func createWorker1(id int) worker {
    work := worker{
        in: make(chan int),
        done: make(chan bool),
    }
    go func() {
        for {
            fmt.Printf("Work %d receiverd %c\n", id, - work.in)
 
            // 再開一個協(xié)程
            go func() { work.done - true}()
        }
    }()
    return  work
}

這種方式就是完全隨機了

使用channel進行樹的遍歷

func (node *Node) TraverseFunc(f func(*Node)){
    if node == nil{
        return
    }
    node.Left.TraverseFunc(f)
    f(node)
    node.Right.TraverseFunc(f)
}
 
func (node *Node) TraverseWithChannel() chan *Node{
    out := make(chan *Node)
    go func() {
        node.TraverseFunc(func(node *Node) {
            out - node
        })
        close(out)
    }()
    return out
}
 
func main(){
    var root Node
    root = Node{Value:3}
    root.Left = Node{}
    root.Right = Node{5,nil,nil}
    root.Right.Left = new(Node)
    root.Left.Right =Node{6,nil,nil}
    root.Traverse()
 
    c:=root.TraverseWithChannel()
    maxNode := 0
    for node := range c{
        if node.Value > maxNode{
            maxNode = node.Value
        }
    }
    fmt.Println("max node value:", maxNode)
 

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

您可能感興趣的文章:
  • Go遞歸修改文件名的實例代碼
  • go build 通過文件名后綴實現(xiàn)不同平臺的條件編譯操作
  • Go并發(fā):使用sync.WaitGroup實現(xiàn)協(xié)程同步方式
  • SpringBoot整合MongoDB實現(xiàn)文件上傳下載刪除
  • golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能
  • Go 如何批量修改文件名

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《go等待一組協(xié)程結(jié)束的操作方式》,本文關(guān)鍵詞  等待,一組,協(xié)程,結(jié)束,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go等待一組協(xié)程結(jié)束的操作方式》相關(guān)的同類信息!
  • 本頁收集關(guān)于go等待一組協(xié)程結(jié)束的操作方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日韩美女在线视频| 91精品国产综合久久久久久 | www在线观看免费视频| 欧美另类一区二区三区| 亚洲免费视频中文字幕| 成人18精品视频| 日韩va亚洲va欧美va清高| 国产色产综合产在线视频| 精品一区二区三区在线观看国产| 成人免费无码大片a毛片| 制服丝袜亚洲色图| 亚洲.国产.中文慕字在线| 国产精品成人免费一区久久羞羞| 欧美天堂一区二区三区| 玉足女爽爽91| 亚洲精品久久一区二区三区777| 欧美视频一区在线| 亚洲主播在线观看| 国产免费一区二区三区最新6| 欧美日韩大陆一区二区| 午夜私人影院久久久久| 精品国产av色一区二区深夜久久 | 99精品国产热久久91蜜凸| 精品国产乱码久久久久久鸭王1| 国产精品成人免费在线| aaa国产一区| 精品视频1区2区3区| 一区二区三区中文免费| 无码人妻久久一区二区三区蜜桃| 欧美电影一区二区三区| 日本成人在线视频网站| 午夜影院黄色片| 中文字幕精品一区二区三区精品| 成人午夜视频在线| 91福利国产成人精品照片| 亚洲国产精品一区二区久久 | 97久久精品人人澡人人爽| 欧美色图片你懂的| 日韩精品免费专区| 性欧美一区二区| 国产精品人人做人人爽人人添 | 久久精品夜色噜噜亚洲aⅴ| 国产精品1区2区| 欧美中文字幕一区| 日韩电影网1区2区| а天堂中文在线资源| 亚洲六月丁香色婷婷综合久久| www.男人天堂| 久久精品亚洲乱码伦伦中文| 成人国产精品视频| 欧美久久一二三四区| 精品中文av资源站在线观看| www.99re7| 水野朝阳av一区二区三区| 伊人影院综合网| 亚洲黄色免费网站| 亚洲自拍偷拍一区二区| 国产精品理论片| 亚洲精品乱码久久久久久蜜桃图片| 26uuu另类欧美| 99久久精品免费精品国产| 日韩一区二区三区视频在线| 国产成人亚洲综合a∨婷婷图片 | 色综合久久中文字幕综合网| 亚洲国产欧美在线| 亚洲av熟女国产一区二区性色| 亚洲免费观看高清完整版在线观看熊| 中文字幕第3页| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲影院理伦片| 久久久久久国产精品无码| 中文字幕在线一区二区三区| 久久一区二区电影| 欧美韩国日本综合| 国产激情第一页| 国产婷婷色一区二区三区四区| 免费观看黄网站| 久久综合九色综合97婷婷| 97久久精品人人澡人人爽| 久久久久久一二三区| 久草免费资源站| 国产精品每日更新在线播放网址| 国产黑丝一区二区| 自拍偷拍欧美精品| 一级特黄曰皮片视频| 亚洲第一福利视频在线| 久草综合在线视频| 国产精品国产三级国产普通话三级 | 在线不卡中文字幕| 高清在线成人网| 欧美精品一区男女天堂| 91蜜桃在线免费视频| 国产偷v国产偷v亚洲高清| 成人手机在线免费视频| 亚洲精品一二三| 欧美特黄一级片| 久热成人在线视频| 91超碰这里只有精品国产| 成人aaaa免费全部观看| 久久久噜噜噜久久中文字幕色伊伊| 欧美xxxxx精品| 洋洋成人永久网站入口| 破处女黄色一级片| 韩国av一区二区三区四区| 欧美一级片免费看| 亚洲一区和二区| 亚洲乱码日产精品bd| 在线免费日韩av| 国产成人精品aa毛片| 久久久久成人黄色影片| 人妻少妇一区二区| 亚洲成人资源在线| 欧美午夜片在线看| 99精品久久久久久| 亚洲色图一区二区三区| 老熟妻内射精品一区| 国产suv精品一区二区三区| 久久蜜桃av一区二区天堂| a毛片毛片av永久免费| 天堂精品中文字幕在线| 欧美日韩不卡视频| caopor在线| 亚洲国产精品一区二区www在线| 欧美在线观看视频一区二区| 成人精品gif动图一区| 欧美国产欧美综合| 天天色影综合网| 国产.欧美.日韩| 国产精品久久午夜| 中文字幕在线观看2018| 国产999精品久久| 国产精品超碰97尤物18| 亚洲一二三在线观看| 成人网男人的天堂| 亚洲欧美成人一区二区三区| 色8久久精品久久久久久蜜| 99热精品一区二区| 一区二区在线免费观看| 欧美午夜不卡视频| 欧美久久久久久久久久久| 视频一区在线视频| 日韩片之四级片| 波多野吉衣中文字幕| 九九视频精品免费| 国产欧美一区二区三区沐欲| 小泽玛利亚一区| 丁香网亚洲国际| 亚洲日穴在线视频| 欧美日韩久久久一区| 欧产日产国产精品98| 美女爽到高潮91| 国产亚洲精品aa午夜观看| 久久爱一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲综合色婷婷| 日韩一区二区免费在线观看| 国产美女永久免费无遮挡| 国产成人av一区二区三区在线 | 亚洲一级不卡视频| 日韩三级在线观看| 国产一区二区三区四区在线| 成人永久aaa| 一个色妞综合视频在线观看| 91精品国产一区二区人妖| 免费福利视频网站| 本田岬高潮一区二区三区| 亚洲第一主播视频| 精品国产a毛片| 破处女黄色一级片| 2一3sex性hd| 国产成人福利片| 亚洲一区二区成人在线观看| 日韩精品一区二区三区四区视频 | 青青草原综合久久大伊人精品| 久久久久九九视频| 色婷婷亚洲精品| 少妇户外露出[11p]| 国产91精品精华液一区二区三区 | 99久久久无码国产精品性波多| 久久国产福利国产秒拍| 国产精品蜜臀在线观看| 欧美日韩国产一级片| 色哟哟精品观看| 99精品视频中文字幕| 青青草伊人久久| 国产精品国产三级国产普通话蜜臀| 欧美久久久久中文字幕| 天天操天天干天天操天天干| 国偷自产av一区二区三区麻豆| 精久久久久久久久久久| 亚洲蜜臀av乱码久久精品蜜桃| 精品国产乱码久久久久久浪潮| 色综合一区二区| 99久久久久久久久久| 成人美女视频在线观看| 奇米影视一区二区三区小说| 亚洲欧洲精品一区二区精品久久久| 日韩一区国产二区欧美三区| 日韩a级片在线观看| 中文字幕免费看|