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

Go channel 协程为什么是安全的

周伯通2021-02-23Golang218

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

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

Go channel为什么是安全的?

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

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

go channe设计原理


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

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

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

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

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

    分享给朋友:

    相关文章

    Elasticsearch 删除数据

    Elasticsearch 删除数据

    版本:elasticsearch7.0删除数据分为两种:1: 删除索引(数据和表结构同时删除,作用同SQLSERVER 中 DROP TABLE "表格名" )...

    Go常用排序算法

    常用的排序算法各种语言相同,这里大致介绍下go的常用排序,废话不多说,直入正题:冒泡排序package main import (    &q...

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

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

    Go slice初始化转换json

            切片slice的声明和初始化 , 如果我们只是单纯的声明 var list []string ...

    Go遍历struct,map,slice

    遍历结构体如何实现遍历结构体字段? 好吧,言归正传!举个例子:demo1:package main import (    "fmt...

    发表评论

    访客

    看不清,换一张

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