首页 > 编程语言 >Go语言并发编程(2):channel 通道介绍和使用

Go语言并发编程(2):channel 通道介绍和使用

时间:2023-03-23 19:11:54浏览次数:45  
标签:编程 goroutine 通信 关闭 使用 Go channel

一、简介

channel 不仅可以用于 goroutine 间进行安全通信,还可以用于同步内存访问。

而且 Go 社区强烈推荐使用 channel 通道实现 goroutine 之间的通信,

不要通过共享内存来通信,而应该通过通信来共享内存。

Go 从语言层面保证了同一时间只有一个 goroutine 能够访问 channel 里的数据,从而保证数据安全。

在 Go 中使用 channel 通信,通过通信来传递内存数据,让内存数据可以在不同的 goroutine 之间进行传递,而不是

用共享内存来通信。

二、channel 的基本使用

前面有 2 篇文章介绍 chanel 的使用:

还有 1 篇讲 channel 的原理:

三、channel 使用注意事项

关闭 channel

  • 一般由发送端关闭 channel
  • 向一个已经关闭的 channel 发送数据,会 panic
  • 读取关闭的 channel ,返回零值

nil channel

  • 读取一个 nil channel,操作将阻塞

所以需要阻塞时,你可以手动修改 channel 为 nil,就会出现阻塞效果。

for...range... 遍历channel

当 for range 遍历 channel 时,如果发送者没有关闭 channel 或在 range 之后关闭,会导致死锁。

标签:编程,goroutine,通信,关闭,使用,Go,channel
From: https://www.cnblogs.com/jiujuan/p/17248549.html

相关文章

  • Go语言并发编程(3):sync包介绍和使用(上)-Mutex,RWMutex,WaitGroup,sync.Map
    一、sync包简介在并发编程中,为了解决竞争条件问题,Go语言提供了sync标准包,它提供了基本的同步原语,例如互斥锁、读写锁等。sync包使用建议:除了Once和WaitGroup......
  • Go语言并发编程(4):sync包介绍和使用(下)-Once,Pool,Cond
    sync包下:Once,Pool,Cond一、sync.Once执行一次Once简介sync.Once是Go提供的让函数只执行一次的一种实现。如果once.Do(f)被调用多次,只有第一次调用会调用f。......
  • go各框架的log日志
    1.kratosLog:typeLoggerinterface{Log(levelLevel,keyvals...interface{})error}typeloggerstruct{loggerLoggerprefix[]interface{......
  • mongodb某个字段distinct计数问题
    方式1List<AggregationOperation>operations=newArrayList<>();operations.add(Aggregation.match(Criteria.where("created_at").gte(begin).lte(end)));operatio......
  • 编程常用的语句
    基本类型、包装类、字符串之间的转换1、基本类型和包装类基本类型和包装类可通过自动装箱和拆箱实现。inti=24;Integera=newInteger(i);//手动装箱Integerb......
  • 如何使用Rust迭代器, 以Luhn Algorithm的实现为例
    本题来源自谷歌的Comprehensive-Rust课程第二天下午的练习问题描述在这个练习的描述中,LuhnAlgorithm是一种用来验证银行卡号是否合法的算法.他的具体流程如下:去掉......
  • 如何使用RunnerGo做自动化测试
    RunnerGo支持自动化测试功能,RunnerGo的工作流程是:接口管理-场景管理-性能测试-自动化测试,所以自动化测试的运行内容为场景下的用例,我们可以在“场景管理”中预先配置好该......
  • C++编程题(蓝桥杯)
        运行结果  #include<iostream>usingnamespacestd;voidjingsai1(){//chh:水深;chs:最初水下深度;intchh=0,chs=0;intI_depth=0;cou......
  • 初识C语言(13)goto语句
    设置程序关机:Knowledge:1:goto语句可以跳出多重嵌套循环 error是标签2:cmd------command命令行 ......
  • 软件开发需要编程作为最基本的基础
    软件开发需要编程作为最基本的基础,软件开发更是一门艺术,编程也是一门手艺,那么小编今天就来说一说我的个人技巧还有经验.软件开发1.作为一个软件的开发技术,我们要言出必行......