博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言之进阶篇有缓冲channel
阅读量:4358 次
发布时间:2019-06-07

本文共 966 字,大约阅读时间需要 3 分钟。

1、有缓冲channel

示例:  有缓存会阻塞,当读取完其中数值时,又可以写入。

package mainimport (	"fmt"	"time")func main() {	//创建一个有缓存的channel	ch := make(chan int, 3)	//len(ch)缓冲区剩余数据个数, cap(ch)缓冲区大小	fmt.Printf("len(ch) = %d, cap(ch)= %d\n", len(ch), cap(ch))	//新建协程	go func() {		for i := 0; i < 10; i++ {			ch <- i //往chan写内容			fmt.Printf("子协程[%d]: len(ch) = %d, cap(ch)= %d\n", i, len(ch), cap(ch))		}	}()	//延时	time.Sleep(2 * time.Second)	for i := 0; i < 10; i++ {		num := <-ch //读管道中内容,没有内容前,阻塞		fmt.Println("num = ", num)	}}

执行结果:

len(ch) = 0, cap(ch)= 3子协程[0]: len(ch) = 1, cap(ch)= 3子协程[1]: len(ch) = 2, cap(ch)= 3子协程[2]: len(ch) = 3, cap(ch)= 3num =  0num =  1num =  2num =  3子协程[3]: len(ch) = 3, cap(ch)= 3子协程[4]: len(ch) = 0, cap(ch)= 3num =  4num =  5子协程[5]: len(ch) = 1, cap(ch)= 3子协程[6]: len(ch) = 0, cap(ch)= 3子协程[7]: len(ch) = 1, cap(ch)= 3子协程[8]: len(ch) = 2, cap(ch)= 3子协程[9]: len(ch) = 3, cap(ch)= 3num =  6num =  7num =  8num =  9

  

转载于:https://www.cnblogs.com/nulige/p/10286793.html

你可能感兴趣的文章
linux下使用dd命令写入镜像文件到u盘
查看>>
001---进程
查看>>
视频人脸检测——OpenCV版(三)
查看>>
php获取来访者在搜索引擎搜索某个关键词,进入网站
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>
写一个欢迎页node统计接口Py脚本(邮件,附件)-py
查看>>
计算两个日期之间的天数
查看>>
Android关于buildToolVersion与CompileSdkVersion的区别
查看>>
袋鼠云日志,日志分析没那么容易
查看>>
缓存穿透 缓存雪崩 缓存并发
查看>>
了解你的Linux系统:必须掌握的20个命令
查看>>
js setInterval 启用&停止
查看>>
knockoutJS学习笔记04:监控属性
查看>>
Linux下启动/关闭Oracle
查看>>