goroutine,信道(channel),死锁

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cj_286/article/details/79554516

goroutine,信道(channel),死锁的一些重点总结

信道(channel)是goroutine之间互相通讯的东西,就是在做goroutine之间的内存共享,默认的信道的存消息和取消息都是阻塞的,这就叫做无缓冲的信道,也就是说,无缓冲的信道在取消息和存消息的时候都会挂起当前的goroutine,除非另一端已经准备好。

var ch chan int = make(chan int)
func foo(){
	ch <- 0 //向ch中加数据,如果没有其他goroutine来取走这个数据,那么挂起foo,直到main函数把0这个数据取走
}
func main(){
	go foo()
	<- ch //从ch取数据,如果ch中还没有放数据,那就挂起main,直到foo函数中放数据为止
}
註:主goroutine执行结束,程序结束,其他的goroutine停止执行

无缓冲的信道永远不会存储数据,只负责数据的流通,从无缓冲信道取数据,必须要有数据流进来才可以,否则当前协程阻塞,数据流入无缓冲信道,如果没有其他goroutine来拿走这个数据,那么当前协程阻塞,无缓冲信道的大小都是0 (len(channel))

如果信道正有数据在流动,还要加入数据,或者信道干涩,我们一直向无数据流入的空信道取数据,就会引起死锁。

死锁的例子

func main(){
	ch := make(chan int)
	<- ch //阻塞main goroutine,信道被锁 ,报错fatal error: all goroutines are asleep - deadlock!
}
ch := make(chan int,1)//只能缓存1个,在写入第一个数据不会阻塞,没有取走第一个数据时,再写入第二个时就会阻塞
被关闭的信道会禁止数据流入,是只读的,我们仍然可以从关闭的信道中取数据,但是不能在写入数据了,在使用range遍历读取信道数据时应注意。

无缓冲的信道是一批数据一个一个的流进流出,缓冲信道则是一个一个存储然后一起流出

社区名言:不要通过共享内存来通讯,而应该通过通信来共享内存

参考:http://blog.csdn.net/sb___itfk/article/details/79045906

展开阅读全文

信道Channel

05-25

<div>n <span style="font-size:16px;"><span><span style="font-size:20px;color:#FF0000;"><strong><span>课程亮点:</span></strong></span></span></span> n</div>n<div style="font-size:16px;">n <span style="color:#424242;"><span style="background-color:#FFFAA5;">课程培训详细的笔记以及实例代码,让学员开始掌握RabbitMQ知识点</span></span> n</div>n<p style="font-size:16px;">n <span style="font-size:14px;"><span><span style="background-color:#FFFFFF;"><span style="color:#424242;"><br /></span></span></span></span> n</p>n<div>n <div>n <span style="font-size:16px;"><span><strong><span style="background-color:#FFFFFF;">课程内容:</span></strong></span></span> n </div>n <div>n  n <ol><li>n <span style="font-size:16px;color:#E53333;"><strong>第1章:RabbitMQ简介:消息中间件概念、RabbitMQ的安装、Java实现RabbitMq客户端调用</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第2章:RabbitMQ几个概念:生产者、消费者、Broken、交换器、路由键、绑定键、交换器类型</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第3章:RabbitMQ的几个API:连接、信道、交换器、队列、发送消息、消费消息</strong></span>n </li>n </ol></div>n</div>n<div style="font-size:16px;">n <span style="color:#FF0000;"><strong><span style="font-size:18px;">课程特色:</span></strong></span> n</div>n<div>n <ol><li>n 笔记RabbitMQ中间件 :用200多条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力n </li>n <li>n 笔记标题采用关键字标识法,帮助学员更加容易记住知识点n </li>n <li>n 笔记以超链接形式让知识点关联起来,形式知识体系n </li>n <li>n 采用先概念后实例再应用方式,知识点深入浅出n </li>n <li>n <strong>提供授课内容笔记作为课后复习以及工作备查工具</strong> n </li>n </ol></div>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;">部分图表(电脑PC端查看):</span></strong></strong></span></span></span> n</p>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;"><br /></span></strong></strong></span></span></span> n</p>

Channel 信道:绑定交换器、路由键、队列

05-25

<div>n <span style="font-size:16px;"><span><span style="font-size:20px;color:#FF0000;"><strong><span>课程亮点:</span></strong></span></span></span> n</div>n<div style="font-size:16px;">n <span style="color:#424242;"><span style="background-color:#FFFAA5;">课程培训详细的笔记以及实例代码,让学员开始掌握RabbitMQ知识点</span></span> n</div>n<p style="font-size:16px;">n <span style="font-size:14px;"><span><span style="background-color:#FFFFFF;"><span style="color:#424242;"><br /></span></span></span></span> n</p>n<div>n <div>n <span style="font-size:16px;"><span><strong><span style="background-color:#FFFFFF;">课程内容:</span></strong></span></span> n </div>n <div>n  n <ol><li>n <span style="font-size:16px;color:#E53333;"><strong>第1章:RabbitMQ简介:消息中间件概念、RabbitMQ的安装、Java实现RabbitMq客户端调用</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第2章:RabbitMQ几个概念:生产者、消费者、Broken、交换器、路由键、绑定键、交换器类型</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第3章:RabbitMQ的几个API:连接、信道、交换器、队列、发送消息、消费消息</strong></span>n </li>n </ol></div>n</div>n<div style="font-size:16px;">n <span style="color:#FF0000;"><strong><span style="font-size:18px;">课程特色:</span></strong></span> n</div>n<div>n <ol><li>n 笔记RabbitMQ中间件 :用200多条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力n </li>n <li>n 笔记标题采用关键字标识法,帮助学员更加容易记住知识点n </li>n <li>n 笔记以超链接形式让知识点关联起来,形式知识体系n </li>n <li>n 采用先概念后实例再应用方式,知识点深入浅出n </li>n <li>n <strong>提供授课内容笔记作为课后复习以及工作备查工具</strong> n </li>n </ol></div>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;">部分图表(电脑PC端查看):</span></strong></strong></span></span></span> n</p>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;"><br /></span></strong></strong></span></span></span> n</p>

没有更多推荐了,返回首页