Go语言协程并发---select多路复用应用
package main import (
"fmt"
"time"
) /*
·循环从一写两读三条管道中随机选择一条能走的路
·等所有路都走不通了就退出循环
*/ func main041() {
chA := make(chan int, 5) chB := make(chan int, 4)
chB <- 123
chB <- 123
chB <- 123
chB <- 123 chC := make(chan int, 3)
chC <- 123
chC <- 123
chC <- 123 go TaskA(chA)
go TaskB(chB)
go TaskC(chC) time.Sleep(10 * time.Second)
fmt.Println("main over")
} func main() {
chA := make(chan int, 5) chB := make(chan int, 4)
chB <- 123
chB <- 123
chB <- 123
chB <- 123 chC := make(chan int, 3)
chC <- 123
chC <- 123
chC <- 123 OUTER:
for true {
/*随机选择一条能走通的case
所有case都走不通时,走default
可以通过break跳出select,break XXX跳出指定标签*/
select {
case chA <- 123:
fmt.Println("执行任务A")
time.Sleep(time.Second)
case x := <-chB:
fmt.Println("执行任务B", x)
time.Sleep(time.Second)
case <-chC:
fmt.Println("执行任务C")
time.Sleep(time.Second)
default:
fmt.Println("全部任务已结束")
//break//跳出select
break OUTER
}
}
fmt.Println("main over") } func TaskA(ch chan int) {
for true {
fmt.Println("TaskA")
ch <- 123
time.Sleep(time.Second)
} }
func TaskB(ch chan int) {
for true {
fmt.Println("TaskB")
<-ch
time.Sleep(time.Second)
} }
func TaskC(ch chan int) {
for true {
fmt.Println("TaskC")
<-ch
time.Sleep(time.Second)
} }
Go语言协程并发---select多路复用应用的更多相关文章
- Go语言协程并发---管道信号量应用
package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...
- Go语言协程并发---互斥锁sync.Mutex
package main import ( "fmt" "sync" "time" ) /* mt.Lock() 抢锁 一次只能被一个协程锁 ...
- Go语言协程并发---条件变量
package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...
- Go语言协程并发---读写锁sync.RWMutex
package main import ( "fmt" "sync" "time" ) /* 读写锁 多路只读 一路只写 读写互斥 */ / ...
- Go语言协程并发---等待组sync.WaitGroup
package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...
- Go语言协程并发---生产者消费者实例
package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...
- Go语言协程并发---原子操作
package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...
- Go语言协程并发---timer秒表与定时器
秒表 package main import ( "fmt" "time" ) /*每秒大喊我要去浪,共9次,然后退出计时*/ func main() { va ...
- 多线程、多进程、协程、IO多路复用请求百度
最近学习了多线程.多进程.协程以及IO多路复用,那么对于爬取数据来说,这几个方式哪个最快呢,今天就来稍微测试一下 普通方式请求百度5次 import socket import time import ...
随机推荐
- 基于vite2+electron12后台管理模板|Electron后台框架系统
前一溜时间有给大家分享一个 electron+vite跨端短视频 项目.这次分享的是vite2.x和electron实现跨平台后台框架,支持国际化多语言配置.导航菜单+树形菜单两种路由菜单模式.展开/ ...
- hdu2438 三分
题意: 给你个90度的转弯,和一辆标准矩形的车,问你这台车能不能拐过去.. 思路: 求出靠近最里侧的那条边所在的直线(这个图形右下角为坐标原点) y = x * ta ...
- hdu 5063 不错的小想法题(逆向处理操作)
题意: 刚开始的时候给你一个序列,长度为n,分别为a[1]=1,a[2]=2,a[3]=3,a[4]=4...a[n]=n,然后有4种操作如下: Type1: O 1 call fun1( ...
- POJ2688状态压缩(可以+DFS剪枝)
题意: 给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路: 水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...
- picpick截屏软件脱壳
0x01 准备 OD 基本查壳软件 picpick可执行文件(不是快捷方式) 0x02 查壳 软件是2018年9月,还是比较新的 显示EP区段是.vmp1,没见过,不知道是压缩壳还是加密壳,搜索所示y ...
- 前端Excel表格导入导出,包括合并单元格,表格自定义样式等
表格数据导入 读取导入Excel表格数据这里采用的是 xlsx 插件 npm i xlsx 读取excel需要通过 XLSX.read(data, {type: type}) 方法来实现,返回一个叫W ...
- angr脚本——以angrctf解题记录为参考
angr脚本--以angrctf解题记录为参考 angr是用于逆向工程中进行二进制分析的一个python框架 符号执行 (Symbolic Execution)是一种程序分析技术.其可以通过分 ...
- Windows bat批处理删除指定N天前的文件
1:新建批处理文件:del_old_file.bat,更改系统时间为7天前,在c盘sql back 目录下新建测试文件,再将系统时间改为正确时间 2:编辑内容: rem 删除C:\sql back目录 ...
- Word·去掉复制粘贴自动添加的空格
阅文时长 | 0.05分钟 字数统计 | 145.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『Word·去掉复制粘贴自动添加的空格』 编写人 | SCscHero 编写时间 | ...
- mybatis-plus批量插入saveBatch太慢?我愿意称rewriteBatchedStatements为神
最近在做项目优化,代码优化之后,测试接口,好家伙.一个定时任务接口执行要10秒左右. 一点点追踪,给每个方法打上执行时间,一点点缩小范围.好家伙,终于让我锁定了目标. 这是mybatis-plus的批 ...