golang goroutine、channel和select
admin
2023-07-31 17:43:26
0

goroutine

package main

import "fmt"
import "time"

func printn(id int){
	for i := 0;i<10;i++ {
		fmt.Println(id,":",i)
	}
}


func main(){
	for i :=0;i<5;i++ {
		go printn(i)
	}
	fmt.Println("waiting...")
	time.Sleep(time.Second * 3)
}
//执行结果:
waiting...
0 : 0
2 : 0
0 : 1
2 : 1
0 : 2
1 : 0
2 : 2
0 : 3
2 : 3
1 : 1
0 : 4
2 : 4
0 : 5
1 : 2
2 : 5
0 : 6
1 : 3
2 : 6
0 : 7
1 : 4
2 : 7
1 : 5
3 : 0
3 : 1
3 : 2
2 : 8
1 : 6
2 : 9
1 : 7
3 : 3
0 : 8
0 : 9
1 : 8
3 : 4
3 : 5
3 : 6
3 : 7
3 : 8
3 : 9
1 : 9
4 : 0
4 : 1
4 : 2
4 : 3
4 : 4
4 : 5
4 : 6
4 : 7
4 : 8
4 : 9


// 如果把sleep去掉会怎么样?
package main

import "fmt"
//import "time"

func printn(id int){
	for i := 0;i<10;i++ {
		fmt.Println(id,":",i)
	}
}


func main(){
	for i :=0;i<5;i++ {
		go printn(i)
	}
	fmt.Println("waiting...")
	//time.Sleep(time.Second * 3)
}
// 执行结果:
waiting...            //原因是没有sleep,当main函数执行完会中断其他所有没执行完的任务

2、channel

package main

import "fmt"
//import "time"

func printn(id int,c chan int){
	for i := 0;i<10;i++ {
		fmt.Println(id,":",i)
	}
	c <- 0      //将数值存到 c
}


func main(){
	c :=make(chan int)   // 创建一个channel 
	go printn(1,c)
//	for i :=0;i<5;i++ {
//		go printn(i)
//	}
	fmt.Println("waiting...")
	//time.Sleep(time.Second * 3)
	<- c        // 取出c得值
}
// 执行结果:
waiting...
1 : 0
1 : 1
1 : 2
1 : 3
1 : 4
1 : 5
1 : 6
1 : 7
1 : 8
1 : 9

3、select 

package main

import "fmt"
import "time"

func fun1(c chan string){
	for {
		c <- "from fun1 +"
		time.Sleep(time.Second * 2)
	}
}

func fun2(c chan string){
        for {
                c <- "from fun2 -"
                time.Sleep(time.Second * 2)
        }
}




func main(){
	c1 :=make(chan string)
	c2 :=make(chan string)
	go fun1(c1)
	go fun2(c2)
	for {
	select {           
		case msg1 := <- c1:
			fmt.Println(msg1)
		case msg2 := <- c2:
                        fmt.Println(msg2)

	}
	}

}
// 执行结果:

from fun2 -
from fun1 +
from fun2 -
from fun1 +
from fun1 +
from fun2 -
from fun2 -
from fun1 +
from fun1 +
from fun2 -
...........


相关内容

热门资讯

广西横州一被蛇咬伤女子不幸离世... 7月8日,新京报记者多方核实获悉,广西横州云表镇一名被蛇咬伤的女子不幸离世。参与救助的村民称,因道路...
拉高“抗中”力道!亲绿媒体人矢... 台湾致癌毒油风暴延烧,赖清德当局延迟公布相关业者名单,遭批评处理慢半拍。面对要求相关官员下台负责声浪...
伊朗伊斯兰革命卫队称对85个美... 【环球网快讯】综合英国《卫报》等媒体8日最新报道,伊朗伊斯兰革命卫队称,伊朗伊斯兰革命卫队对位于巴林...
见证中原人居升级|中原芯首座四... 7月7日,通派龙湖·中原颂特邀郑州市房屋交易中心及郑州市不动产登记中心入驻项目现场,专项开展业主不动...
伊朗革命卫队称击落美军MQ9无... 据伊朗媒体今天(7月8日)报道,伊朗伊斯兰革命卫队称在伊朗南部击落了一架美军MQ-9“死神”无人机。
陈立泉、贲德荣获2025年度国... 8日,备受瞩目的2025年度国家最高科学技术奖在北京人民大会堂揭晓。中国科学院物理研究所陈立泉院士、...
陈立泉、贲德获国家最高科学技术... 据新华社消息,2025年度国家最高科学技术奖7月8日在京揭晓,陈立泉院士、贲德院士获国家最高科学技术...
原创 朱... 听说过朱鹮没?就是那种浑身雪白、脸蛋红扑扑的仙鸟,瞅着跟仙女下凡似的。可你们知道不,这玩意儿差点就彻...
换车计划怎样比较购车决策需重视... 在考虑更换车辆时,购车决策的重要性不言而喻。一个明智的购车决策不仅能让你拥有一辆符合需求的汽车,还能...
亿万富豪“换血哥”得不治之症!... 啊这...每年砸上百万美元进行身体改造,追求长生不老的亿万富翁“换血哥”布莱恩约翰逊,竟然得“不治之...