Go channel 协程为什么是安全的
Channel跟java/php的 thread不一样,首先channel是协程不是线程。channel不会产生新的线程,
自然不会涉及到新的进程或者线程调度。所以就不存在线程安全这个概念了.
Go channel为什么是安全的?
Golang的Channel,发送一个数据到Channel 和从Channel接收一个数据都是原子性的。
这个可以看源码就知道channel内部维护了一个互斥锁,来保证线程安全:
而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁,后者就是Channel。
也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的.因为channel底层实现出队入队时也加锁了.