并发编程select

2021/11/13 22:41:25

本文主要是介绍并发编程select,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

如果多管道,一般使用for循环读取。

package main

import "fmt"

func main() {
	ch1:=make(chan int)
	go func(){
		sum:=0
		for i := 1; i < 1000; i++ {
			sum+=i
			ch1<-sum
		}
		close(ch1)		//关闭管道
	}()

	ch2:=make(chan int)
	go func(){
		for i := 1; i < 1000; i++ {
			ch2<-i+2
		}
		close(ch2)		//关闭管道
	}()


	// for {				//死循环方式读取管道值
	// 	value,ok:=<-ch1
	// 	if ok{
	// 		fmt.Println(" for ch1=",value)
	// 	}else{
	// 		break
	// 	}
	// }

	// for c:=range ch1{		//较为推荐的for-range读取,直到管道关闭就不再接收。
	// 	fmt.Println("range cha1=",c)
	// }

//如果定义多个管道,那么以上两种就有点吃力了,引入select方法
for   {
	select {			//必须为IO操作,要么读要么写。当多个分支条件满足时,会随机选择一个分支执行,本题需要持续接收值,所以需要加for
	case value,ok:=<-ch1:
		if ok {
			fmt.Println("select ch1=",value)
		}
	case value,ok:=<-ch2:
		if ok {
			fmt.Println("select ch2=",value)
		}
	}
 }

	fmt.Println("main 结束")  //为啥不执行这个?
}


这篇关于并发编程select的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程