go 并发编程
2018-04-24 本文已影响0人
今早上
![](https://img.haomeiwen.com/i6219539/a44996c11d90d4f4.png)
![](https://img.haomeiwen.com/i6219539/7a9747635d361b1f.png)
![](https://img.haomeiwen.com/i6219539/e07fbf80df66beb2.png)
在资源有限的情况下,如何最大化的利用有限的资源就是并发,提高并发
![](https://img.haomeiwen.com/i6219539/cec6bacf6bfecae9.png)
goroutine
![](https://img.haomeiwen.com/i6219539/59a676df4610238d.png)
![](https://img.haomeiwen.com/i6219539/c81a09cfb8038a10.png)
![](https://img.haomeiwen.com/i6219539/6443699ee5657c1c.png)
![](https://img.haomeiwen.com/i6219539/716ad3ed9ad99259.png)
![](https://img.haomeiwen.com/i6219539/bb7380a46fc8f5fd.png)
![](https://img.haomeiwen.com/i6219539/87d09e91ef5caacf.png)
runtime包
![](https://img.haomeiwen.com/i6219539/8cb83dbc49ac844a.png)
![](https://img.haomeiwen.com/i6219539/536310c477b5944f.png)
![](https://img.haomeiwen.com/i6219539/83a7907486b695f3.png)
![](https://img.haomeiwen.com/i6219539/d24799451186306c.png)
![](https://img.haomeiwen.com/i6219539/b86f60b57d99a074.png)
![](https://img.haomeiwen.com/i6219539/62773796167c12b7.png)
![](https://img.haomeiwen.com/i6219539/427c0b04ae261d42.png)
channel
![](https://img.haomeiwen.com/i6219539/bb6d8a439b65c10d.png)
![](https://img.haomeiwen.com/i6219539/8b26fe9e4718c887.png)
![](https://img.haomeiwen.com/i6219539/175725245f27e7dd.png)
![](https://img.haomeiwen.com/i6219539/17cf49563d3af726.png)
无缓冲的channel
![](https://img.haomeiwen.com/i6219539/0dfe8e456e7020a2.png)
![](https://img.haomeiwen.com/i6219539/dd35e439fd490b47.png)
![](https://img.haomeiwen.com/i6219539/338c14680d8cca87.png)
![](https://img.haomeiwen.com/i6219539/805e82827207f6da.png)
有缓冲的channel
![](https://img.haomeiwen.com/i6219539/a7f5453edad070fd.png)
![](https://img.haomeiwen.com/i6219539/05fd7266ffcac1af.png)
![](https://img.haomeiwen.com/i6219539/59a5ae32eea3b4e3.png)
![](https://img.haomeiwen.com/i6219539/ec058863e6500a9b.png)
![](https://img.haomeiwen.com/i6219539/3e8f7641186e97db.png)
![](https://img.haomeiwen.com/i6219539/da45ab557b6ecf25.png)
通过关闭channel执行
![](https://img.haomeiwen.com/i6219539/04c7a0f908f5a0cd.png)
![](https://img.haomeiwen.com/i6219539/3084795569c5229c.png)
单向channel
![](https://img.haomeiwen.com/i6219539/38f536d2c9586587.png)
![](https://img.haomeiwen.com/i6219539/ff064024d05fa8c9.png)
![](https://img.haomeiwen.com/i6219539/6a87953adc1052e2.png)
hello fatal error: all goroutines are asleep - deadlock!
在main goroutine线,期望从管道中获得一个数据,而这个数据必须是其他goroutine线放入管道的
但是其他goroutine线都已经执行完了(all goroutines are asleep),那么就永远不会有数据放入管道。
所以,main goroutine线在等一个永远不会来的数据,那整个程序就永远等下去了。
这显然是没有结果的,所以这个程序就说“算了吧,不坚持了,我自己自杀掉,报一个错给代码作者,我被deadlock了”
channel 是不同协成之间通讯用的!
![](https://img.haomeiwen.com/i6219539/9fe525f8d7fa2b87.png)
![](https://img.haomeiwen.com/i6219539/7affac0f1f27008e.png)