Golang中的channel

news/2025/2/22 17:29:16/

单纯地将函数并发没有意义,函数与函数之间需要数据交换。 

共享内存可以进行数据交换,但是在不同的协程里面容易发生竞态问题,为了保证数据交换的正确性,很多数据交换的正确性,很多并发模型中必须使用互斥量对内存需要加锁,这样会造成性能下降。

Golang提倡通信共享内存而不是通过共享内存而实现通信。

通道有两个操作,接收和发送,发送是发送值到通道,接收是从通道里面接收值。

通道panic的三种情况 :关闭已经关闭的通道、对关闭过的通道再发送值、关闭一个值为nil的通道。

无缓冲通道只有在接收方能够能够接收值的时候才能发送,否则一直处于等待发送的阶段。

无缓冲通道只有在发送方能够能够发送值的时候才能接收,否则一直处于等待接收的阶段。

以上两种情况都会可能会导致死锁。

channel 主要是由环形队列、等待队列、锁组成等

环形队列:作为缓冲区

等待队列:被阻塞的goroutine 将会挂在channel的等待队列(等待写消息队列和等待读消息队列)中

锁:主要是为了线程安全,在对数据进行入队列和出队列的时候,需要先获取互斥锁。

Channel死锁的场景:

无缓冲channel只读不写,或者是只写不读

多个协程互相等待

Channel的应用场景:

定时任务、解耦生产者消费者、控制并发数量、顺序


http://www.ppmy.cn/news/804363.html

相关文章

微会显示服务器当前线路忙,免费电话之争:触宝电话/微会谁更强

最近免费网络电话成为大家受捧的手机App,很多网友升级4G网络后会第一时间安装这样一款App,受捧的原因很简单,它可以替代传统语音来打电话,即便对方没有安装相应的客户端也能打通,而且不花一分钱,更不用担心…

0085 开头的电话拦截方法(小米手机有效)

1. 在 “通话设置” 中,找到“骚扰拦截设置” 2. 点击“黑名单号码”,在里面添加“0085”这条记录即可

小米责令泄密合作方赔偿一百万;Facebook母公司元宇宙部门亏损900亿;谷歌测试新AI聊天产品丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 IPO 展新股份IPO被终止 据深交所网站2月1日消息,根据《深圳证券交易所创业板股票发行上市审核规则》第六十七条的有关规定,深交所决定终止对太仓展新胶粘材料股份有限公司(以下简称“…

软电话 开源的和免费的大全

http://www.mihua.net/node/279m.htm 感觉比较出名的就是linphone,x-lite了 软电话Soft Phones (开源) 源代码允许下载,修改 名字描述ActXPhone An ActiveX-Control SIP Softphone based on the Microsoft Real Time Communications (RTC) API.http…

【免费】小米即时消息云MIMC介绍——免费、简单实现IM

前言 IM是互联网业务重要组成,很多场景下需要即时地、方便地交流。而实现IM较为复杂,需要后台提供连接、投递、存储、统计支持,人力成本和机器成本都很高。所以目前很多用户选择不自己实现IM功能,或者使用QQ、微信等已经成熟的Ap…

Python读取指定的TXT文本文件并从中提取指定数据的方法

本文介绍基于Python语言,遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件,并从上述每一个文本文件中,找到我们需要的指定数据,最后得到所有文本文件中我们需要的数据的合集的方法。 首先,我们来明确一…

VS2019+Qt5.15 在线显示百度地图

1.Qt5.15编译程序需要选择mscv2019 Release版本 2.需要到百度地图开发平台注册并获取到开发者key 3.显示地图是JS与Qt的交互过程&#xff0c;显示地图的html文件&#xff1a; <!DOCTYPE html> <html><head> <meta name"viewport" content&q…

android 获得手机号码

手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号&#xff0c;供网络与设备识别那就是IMSI号码&#xff0c;手机的信号也可以说是通过这个号码在网络中传递的&#xff0c;并不是手机号码。试想&…