GO语言练习:channel 缓冲机制
1、代码
2、运行
3、解析
1、代码 buffer.go
package main import (
"fmt"
"time"
) func readThread(ch chan int) {
fmt.Println("read for reading...")
for i := range ch {
fmt.Println("get i : ", i)
if 20 == i {
break
}
time.Sleep(1e8)
}
fmt.Println("read over...")
} func main() {
ch := make(chan int, 1024)
go readThread(ch)
time.Sleep(1e9 * 2)
for i := 1; i <= 20; i++ {
ch <- i
}
fmt.Println("waitting for reading...")
time.Sleep(1e9 * 3)
fmt.Println("over...")
}
2、运行
$ go run buffer.go
read for reading...
waitting for reading...
get i : 1
get i : 2
get i : 3
get i : 4
get i : 5
get i : 6
get i : 7
get i : 8
get i : 9
get i : 10
get i : 11
get i : 12
get i : 13
get i : 14
get i : 15
get i : 16
get i : 17
get i : 18
get i : 19
get i : 20
read over...
over...
3、解析
根据运行结果进行分析:
1)先运行的readThread读线程,读线程已经做好了读的准备,但此时channel中还没有数据,所以阻塞了。等待读动作。
2)主线程中,一次性向channel中写入大量数据,由于有缓冲机制,所以可以一次性的写入多个数据而不会阻塞。当主线程写完了数据,就开始等待读线程的读动作结束。
3)channel中开始有数据,读线程开始读数据,每0.1秒钟读取一个数据,一共读取20次。读取结束了,打印read over。
4)主线程等待的时间到了,返回,退出
GO语言练习:channel 缓冲机制的更多相关文章
- GO语言之channel
前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...
- 深度解密Go语言之channel
目录 并发模型 并发与并行 什么是 CSP 什么是 channel channel 实现 CSP 为什么要 channel channel 实现原理 数据结构 创建 接收 发送 关闭 channel ...
- java : 包装类 缓冲机制的使用(转载)
摘要: 八种基本数据类型和其包装类中 Integer valueOf(int i).Byte valueOf(byte b).Short valueOf(short s).Long valueOf(l ...
- java Swing 图片缓冲机制
java Swing 图片缓冲机制: 参考:http://jorneyr.iteye.com/blog/868858#comments package util; import java.awt.ge ...
- C 语言多线程与锁机制
C 语言多线程与锁机制 多线程 #include <pthread.h> void *TrainModelThread(void *id) { ... pthread_exit(NULL) ...
- Printf的缓冲机制
转:https://blog.csdn.net/qq_25424545/article/details/78772959 今天用fork()写程序时候,突然发现自己对Printf的缓冲机制还是有些不够 ...
- MySQL数据库的查询缓冲机制
MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...
- 【C++】异常简述(一):C语言中的异常处理机制
人的一生会遇到很多大起大落,尤其是程序员. 程序员写好的程序,论其消亡形式无非三种:无疾而终.自杀.他杀. 当然作为一名程序员,最乐意看到自己写的程序能够无疾而终,因此尽快的学习异常处理机制是非常重要 ...
- malloc实现机制、缓冲机制、文件操作、mmap虚拟地址(day06)
一.malloc的实现机制(缓冲机制) 库函数跟系统调用之间的关系 什么是缓冲? 内存分配的原理. 封装 函数A的实现代码中调用了函数B.函数B的功能是函数A主要的功能,这样就说函数A封装了函数B. ...
随机推荐
- 初识SQL Server Integration Service
SSIS(SQL Server Integration Service)是Microsoft 从SQL Server2005 以后发布的,现在一直跟随每个SQL server版本.它是Microsof ...
- Beego框架使用
go get github.com/astaxie/beego vim hello.go package main import "github.com/astaxie/beego" ...
- 不定义JQuery插件,不要说会JQuery 分类: JavaScript 2014-11-24 14:18 155人阅读 评论(0) 收藏
一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...
- [译]:Orchard入门——安装Orchard
原文链接:Installing Orchard 文章内容基于Orchard 1.8版本 安装Orchard的方式 主要有以下四种方式安装Orchard: 利用Microsoft Web Platfor ...
- Android UI学习 - Tab的学习和使用(转)
本文是参考Android官方提供的sample里面的ApiDemos的学习总结. TabActivity 首先Android里面有个名为TabActivity来给我们方便使用.其中有以下可 ...
- jfreeChart柱状图各属性详细设置
一. 下载与环境配置 此最新版本为 1.0.13 解压jfreechart-1.0.13.zip 将lib目录下的jfreechart-1.0.13.jar .jcommon-1.0.16.jar 复 ...
- DrawerLayout
一.概述 DrawerLayout是官方提供的侧滑菜单,相比SliddingMenu,它更加轻量级.默认情况下,DrawerLayout可以设置左侧或者右侧滑出菜单.如下, x ...
- Linux学习笔记(7)Linux常用命令之压缩解压命令
(1)gzip gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件] 压缩后的文件格式为.gz. 例:将/etc目录下的services文 ...
- SQLServer 维护脚本分享(11)部分DBCC及系统存储过程
--DBCC命令与用法 DBCC HELP('?') DBCC HELP('useroptions') DBCC USEROPTIONS WITH NO_INFOMSGS --当前DB的区及文件 DB ...
- java出错
某天cmd运行java突然莫名其妙的出错:(之前还好好的) Error occurred during initialization of VMjava/lang/NoClassDefFoundErr ...