go 有缓冲channel示例
2018-03-15 13:47
281 查看
package main //有缓冲通道实例,代码参考《go语言实战》 import ( "sync" "math/rand" "time" "fmt" ) const ( numberGoroutines=4 taskLoad=10 ) var wg sync.WaitGroup func init(){ rand.Seed(time.Now().Unix()) } func main(){ task:=make(chan string,taskLoad) wg.Add(numberGoroutines) for gr:=1;gr<=numberGoroutines;gr++{ //开启gr等待任务运行 go work(task,gr) } //模拟运行任务 for wk:=1;wk<=taskLoad;wk++{ task<-fmt.Sprintf("task %d",wk) } close(task) wg.Wait() } func work(tasks chan string,tasknum int){ defer wg.Done() for{ task,ok:=<-tasks if !ok{ fmt.Printf("Worker: %d : Shutting Down\n", tasknum) return } fmt.Printf("worker: %d:started %s\n",tasknum,task) // 随机等一段时间来模拟工作 71 sleep := rand.Int63n(100) time.Sleep(time.Duration(sleep) * time.Millisecond) // 显示我们完成了工作 75 fmt.Printf("Worker: %d : Completed %s\n", tasknum, task) } }
相关文章推荐
- Go基础系列:双层channel用法示例
- GO 使用channel进行同步 (缓冲channel)
- Go基础系列:nil channel用法示例
- GO语言练习:channel 缓冲机制
- Go channel 使用示例代码
- 一些“跳过”按钮及缓冲框示例
- go channel缓冲区的大小
- 利用channel在goroutins之间控制同步和传递数据
- Channel 9上的两个新Windows 8 示例视频
- go排序示例
- Go语言 简单的http服务器示例
- Go语言_Go语言的channel
- Hyperledger Fabric SDK 示例fabric-samples-《balance-transfer》之三《加入到Channel》
- go示例1:文件读写和排序(快速 冒泡)
- 理解Go的Goroutine和channel
- go map slice array channel 传参
- go语言channel关注点
- Go并发编程之channel
- java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
- go语言channel实现多核并行化运行的方法