摘要: 这段代码执行后不会打印任何东西,因为主协程和子协程的执行几乎是同时的,那么它的打印自然不会被执行。 还有一个重置的例子 阅读全文
posted @ 2018-09-19 17:50 蟒城贝勒爷 阅读(1530) 评论(0) 推荐(0) 编辑
摘要: package main import ( "time" "fmt" ) func main() { <-time.After(2*time.Second) //这个方法表示的是在此等待2秒,并返回一个通道,很常用 fmt.Println("时间到。。。。") time.Sleep(2*time.Second) fmt.Println("时间... 阅读全文
posted @ 2018-09-19 17:19 蟒城贝勒爷 阅读(1710) 评论(0) 推荐(0) 编辑
摘要: 执行的结果为 timer的触发事件本来就是一次性的,来验证一下 如果不是一次性的,那么它应该不断的打印"时间到" 执行结果为 死锁了。。。。确实是一次性的 阅读全文
posted @ 2018-09-19 17:11 蟒城贝勒爷 阅读(127) 评论(0) 推荐(0) 编辑
摘要: var ch1 chan int //ch1是一个正常的channel,不是单向的 var ch2 chan <- float64 //ch2是一个单向的channel,只用于写float64的数据 var ch3 <- chan int //ch3是一个单向的channel,只用于读取int数据 阅读全文
posted @ 2018-09-19 16:32 蟒城贝勒爷 阅读(1201) 评论(0) 推荐(1) 编辑
摘要: 并不是往通道里放多少次数据,就必须取多次少数据的(之前的例子都是放3次取3次,放10次取10次),我们可以做一个操作,当子协程没有新放入的时候,主协程不再去取,这就是关闭通道 执行结果 阅读全文
posted @ 2018-09-19 14:56 蟒城贝勒爷 阅读(573) 评论(0) 推荐(0) 编辑
摘要: 有缓冲通道就是在有能力保留数据的通道,那么通道在满的时候或者通道是空的时候,存数据和取数据就会发生阻塞 执行的结果 在主协程等待的2秒内,子协程完全可以进行3个值的写入,因为循环只有3次,所以才会看到这样的结果,但如果主协程和子协程都循环10次呢 因为是并发的执行,所以在每次执行的结果并不是完全一样 阅读全文
posted @ 2018-09-19 14:38 蟒城贝勒爷 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 无缓冲通道(unbuffered channel)是指在接收前没有能力保存任何值的通道,在之前的例子中使用的都是无缓冲通道,需要注意的是,对于无缓冲通道而言,不管是往通道里写数据还是从通道里读数据,都会造成阻塞,并且通过len或者cap函数,得到的结果都为0,看下面的例子 执行的结果为 对于结果的理 阅读全文
posted @ 2018-09-19 11:40 蟒城贝勒爷 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 执行的结果 主协程和子协程近乎是同时执行,但是主协程因为有了管道的阻塞所以一直都不会执行打印 子协程在执行过自己的循环之后才会对管道进行一个写值,这时主协程一旦看到管道里有值就会立刻执行下面的程序 阅读全文
posted @ 2018-09-19 11:12 蟒城贝勒爷 阅读(373) 评论(0) 推荐(0) 编辑
摘要: goroutine运行在相同的地址空间,因此访问共享内存必须 做好同步。goroutine奉行通过通信来共享内存,而不是共享内存通信 它跟map一样,使用make来创建,它是一个引用 ,而不是值传递 make(chan Type, capacity) channel <- value //发送val 阅读全文
posted @ 2018-09-19 09:35 蟒城贝勒爷 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 这段代码执行的结果为 可以看到因为使用了并发它的打印是交叉了的,但是在实际的使用过程中,我们肯定是希望打印了person1的任务后再打印person2的任务,如何在使用并发的时候也能实现呢?下一篇,Channel的使用 阅读全文
posted @ 2018-09-19 09:16 蟒城贝勒爷 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 会发现打印结果里有大片的1或者0 那如果指定两个核呢 那么结果会很不一样 可以看得出来并发的时间片出让明显快了很多 那么4核 虽然看不出来啥, 阅读全文
posted @ 2018-09-19 07:44 蟒城贝勒爷 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 这里执行的结果为 但是如果在defer fmt.Println("cccccccccccc")的下面加一句return呢? 那么执行结果就是 return的意思是终止此函数,那么在终止前又有一个defer所以才会打印ccccccccc,那么dddddddddddd自然不会被执行 下面我们的goexi 阅读全文
posted @ 2018-09-19 07:25 蟒城贝勒爷 阅读(192) 评论(0) 推荐(0) 编辑
摘要: Gosched:让出CPU时间片 Goexit:退出当前的协程 GOMAXPROCS:设置使用最大的CPU数量(哇,牛逼了。。。) 如果程序写在这样的话,那么子协程是永远都不会被执行的,因为在go中向来都先执行主协程,这里主协程的循环明显比子协程要短,那么子协程永远都不会被执行 所以需要主协程让出时 阅读全文
posted @ 2018-09-19 07:03 蟒城贝勒爷 阅读(738) 评论(0) 推荐(0) 编辑