当前位置:首页 > Golang杂记 > 正文内容

Go channel 协程为什么是安全的

2年前 (2021-02-23)Golang杂记4926

    Channel跟java/php的 thread不一样,首先channel是协程不是线程。channel不会产生新的线程,

自然不会涉及到新的进程或者线程调度。所以就不存在线程安全这个概念了.  

Go channel为什么是安全的?

    Golang的Channel,发送一个数据到Channel 和从Channel接收一个数据都是原子性的。

这个可以看源码就知道channel内部维护了一个互斥锁,来保证线程安全:

go channe设计原理


      而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁,后者就是Channel。

      也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的.因为channel底层实现出队入队时也加锁了.

    扫描二维码推送至手机访问。

    版权声明:本文由周伯通的博客发布,如需转载请注明出处。

    本文链接:https://www.zhoubotong.site/post/25.html

    分享给朋友:

    相关文章

    go协程全局变量和局部变量

    大家可能经常会用到类似如下代码片段:package main import (    "fmt"   ...

    关于go协程同步的几种方法

    这里咋们简要介绍下关于go中协程的几种同步方法。先说下概念性的:协程概念简要理解协程有点类似线程,是一种更为轻量级的调度单位,但协程还是不同于线程的,线程是系统级实现的,常见的调度方法是时间片轮转法,...

    windows下编译linux可执行程序

    开发中,我们可以在Windows下编译Linux 64位可执行程序,首先获取目标系统所支持的构架,比如x86/x64/arm64/arm 等等。在 linux 系统中,我们可以使用命令 uname -...

    发表评论

    访客

    看不清,换一张

    ◎欢迎参与讨论,请在这里发表您的看法和观点。