![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
chan
浩玥当空照
写的过程就是在学习
展开
-
06-go数据类型内存结构-chan
5. chanvar var_chan = make(chan int ,1)func func1(){...var var2_chan = make(chan int ,3)...}1、通过runtime.makechan()创建channel。2、第一个参数为chan类型信息3、返回值类型为*hchan即: chan变量实际为一个hchan指针由全局变量也可以看出。f...原创 2019-06-23 11:52:21 · 283 阅读 · 0 评论 -
17-chan原理1-创建
1. 并发模型对于大量的服务请求,有两种服务模式:单一服务模式、多服务模式。对于单一服务模式,比较典型的如Redis,单进程,单线程服务。这种模式简单高效,但是适用场景有限,很容易达到服务能力的瓶颈。多服务模式有很多种实现方式。适应于不同的业务场景。由于是多服务,不同服务间难免存在对同一资源的访问,这就涉及到服务间的同步问题。不同服务实现方式,同步的机制不同。线程是操作系统对进程管理的最小粒...原创 2019-07-14 23:14:08 · 425 阅读 · 0 评论 -
18-chan原理2-读取
4. 读取chan由汇编可以看出,读取一个chan,转化为对runtime.chanrecv1()的调用。如果采用两个返回值方式,则转化为runtime.chanrecv2()调用,区别在于返回一个bool值,标识是否接收到了数据。参数1,chan本身。参数2,接收读取数据的变量。var var_chan_1 = make(chan int)var_read = <-var_c...原创 2019-07-18 07:44:41 · 428 阅读 · 0 评论 -
19-chan原理3-发送
5. 发送chan由汇编可以看出,向chan发送数据会转化为对runtime.chansend1()->chansend()->send()的调用。 tmp :=9999 var_chan_1 <- tmp 0x00fb 00251 (channel.go:32) MOVQ $9999, ""..autotmp_6+64(SP...原创 2019-07-18 07:45:29 · 341 阅读 · 0 评论 -
20-chan原理4-select
6. selectselect语句的语法:每个case都必须是一个channel的发送、或者接收操作。所有channel表达式都会被求值。如果任意case中表达式可以进行,它就执行,其他被忽略。如果有多个 case都可以运行,Select会随机公平地选出一个执行。其他不会执行。一个没有任何case的select语句写作select{},会永远地等待下去没有break。否则:如果...原创 2019-07-18 07:46:30 · 153 阅读 · 0 评论 -
21-chan原理5-close
关闭channel关闭一个channel的底层实现是 runtime.closechanclose(var_chan_1)//对应汇编0x0146 00326 (channel.go:51) CALL runtime.closechan(SB)runtime.closechansrc\runtime\chan.go加锁channel的关闭过程是加锁的。 发送、读取...原创 2019-08-04 15:06:29 · 275 阅读 · 0 评论