This website works better with JavaScript
Home
Explore
Help
Register
Sign In
YWJL
/
GoLearn
Watch
1
Star
0
Fork
0
Files
Issues
0
Pull Requests
0
Wiki
Branch:
master
Branches
Tags
master
GoLearn
/
Go语言核心36讲
/
10
/
read.md
read.md
1.9 KB
Permalink
History
Raw
通道的基本操作
0.资料
https://gfw.go101.org/article/channel.html
https://www.cnblogs.com/liang1101/p/7285955.html
https://www.cnblogs.com/sparkdev/p/10930168.html
1. 特性
对于同一个通道,发送操作之间是互斥的,接收操作之间也是互斥的。(入和出的互斥性)
发送操作和接收操作中对元素值的处理都是不可分割的。(入和出的原子性)
发送操作在完全完成之前会被阻塞。接收操作也是如此。
说明
通道类型值,本身是并发安全的
并发执行,是多个代码块分别在不同的 goroutine 之中,并有机会在同一个时间段内被执行。(并发不是同时执行)
通道分缓冲通道和非缓冲通道
2. panic
向已经关闭的channel写。
关闭已经关闭的channel。
3.阻塞
什么是阻塞,我的理解就是,这个步骤(接受或者发送)执行不了,停在这了,只有当其对应的(发送或者接受)唤醒,才能解除当前阻塞
无论是读或者写,第一步都是先获取当前通道的锁。
一般在生产者处关闭通道,在消费者处关闭容易引发恐慌
2. 协程(gorountine)
进程、线程(内核级线程)、协程(用户级线程)三个概念
进程、线程由内核调度,有CPU时间片的概念,有多种调度算法
协程(用户级线程)对内核透明,即系统不知道有协程的存在,是完全由用户自己的程序进行调度控制的。
https://learnku.com/articles/41405
Go 协程(goroutine)通过信道(channel)进行通信
。信道可以防止多个协程访问共享内存时发生资源争抢的问题。