位置: IT常识 - 正文

Go 语言入门 1-管道的特性及实现原理(go语言ui)

发布时间:2024-01-27
入坑 go 也快一年了,从今天开始会定期分享一下 Go 语言学习过程中的一些基础知识。 go 语言中的管道, 主要是用于协程之间的通信, 比 UNIX 的管道更加轻量和易用。 我们先看一下管道的数据结构: type hchan struct { gcount uint // 环形队列剩余元素个数 d ...

推荐整理分享Go 语言入门 1-管道的特性及实现原理(go语言ui),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:go 语言 gui,go 语言 gui,go 语言 gui,go语言 _,go语言从入门到实战,go语言基础入门,go 语言 gui,go语言入门指南,内容如对您有帮助,希望把文章链接给更多的朋友!

入坑 go 也快一年了,从今天开始会定期分享一下 Go 语言学习过程中的一些基础知识。

go 语言中的管道, 主要是用于协程之间的通信, 比 UNIX 的管道更加轻量和易用。

我们先看一下管道的数据结构:

type hchan struct {gcountuint//环形队列剩余元素个数dataqsizuint//环形队列长度bufunsafe.Pointer // 环形队列指针elemsizeuint16 // 每个元素大小closeduint32//标识关闭状态elemtype*_type// 元素类型sendxuint//下一个元素写入时的下标recvxuint//下一个元素读取时的下标recvqwaitq // 等待读消息的队列sendqwaitq // 等待写消息的队列lockmutex//互斥锁,保障管道无法并发读写}

源码链接:

https://github.com/golang/go/blob/0d0193409492b96881be6407ad50123e3557fdfb/src/runtime/chan.go#L33

通过上述数据结构, 我们可以理解管道是由三部分组成的:

Go 语言入门 1-管道的特性及实现原理(go语言ui)

环形队列

读写等待队列

队列元素基本信息

从管道读取数据时, 如果管道缓冲区为空或者没有缓冲区, 那么当前协程就会阻塞, 然后放入 recvq 队列中。

往管道写入数据时,如果管道缓冲区为空或者缓冲区满了,那么当前协程就会阻塞, 然后放入 sendq 队列中。

读阻塞的协程会被新来的写数据的协程唤醒。

写阻塞的协程会被新来的读数据的协程唤醒。

同时上述数据结构中, 我们可以看到一个管道中只能传递一种元素类型。如果想数据类型动态化, 可以传递 interface。

管道的操作:

初始化有两种方式:

变量

本文链接地址:https://www.jiuchutong.com/zhishi/311844.html 转载请保留说明!

上一篇:【HDLBits刷题日记】05 More Verilog Features(高效刷题app)

下一篇:Spring(十五):Spring整合MyBatis的两种方式

  • 电子普通发票和纸质普通发票一样吗
  • 出租设备的租金收入记入( )账户
  • 企业建厂房购进材料可以抵扣吗
  • 综合所得减除费用标准
  • 资产处置损益属于当期损益吗
  • 餐费补贴要交个人所得税吗
  • 工厂筹建期间购房合法吗
  • 进口转卖业务
  • 稽查补缴增值税做账
  • 职工伤残补助金被单位扣留违反什么法
  • 制造费用折旧费转入生产成本吗
  • 凭证可以部分冲销吗
  • 什么是个体工商户业主
  • 营改增后工业企业税率是多少?
  • 税款负担方式是什么
  • 地税纳税人编码是什么
  • 中途做账的企业如何建账
  • 股权转让企业所得税如何申报
  • 分公司的款汇入总公司得出什么证明
  • 电子税务局怎么变更财务负责人
  • 中级会计考试考后审核需要什么资料
  • 制造费用明细科目有哪些
  • 备注栏需要写内容嘛
  • 公司内部收据能做凭证吗
  • 市政府的财政拨款怎么算
  • 资产处置收益的项目有哪些
  • 摊销费用的会计科目
  • php字符串定义的三种方式
  • 如何处理收到的短信
  • 企业并购的基本方法有
  • el-input value
  • php fetchall
  • 员工离职补偿金账务处理
  • 养老院护工5.8k包吃住
  • 自然vc
  • framework3.5怎么打开
  • 本月营业利润
  • php的用处
  • echarts bi
  • php框架的作用
  • 公司代缴个税在工资里工资表怎么填
  • 记账凭证和收付账簿区别
  • 手把手教你实现用户登录界
  • vscodehtml快捷键
  • vue如何配置路由
  • MMEngine理解
  • python函数的默认值
  • 修的公路是否上固定资产
  • 退社保基金怎么办理
  • 小规模发票跨月冲红怎么做账
  • 小规模纳税人怎么开增值税专用发票
  • 公司注销了就可以不发工资么
  • 资本公积的用途主要用于
  • 水泥销售会计分录怎么做
  • 固定资产工作汇报
  • 出租房屋会计账务处理
  • 支付一年房租费怎么做账
  • 少交税款滞纳金
  • 小规模纳税人需要每月报税吗
  • 弃置费用摊销为什么在贷方增加
  • 反结账钱会转回去吗
  • 收到赠送的东西,并给员工自用,怎么做账
  • 在建工程不做了发生的费用如何做账?
  • 公司购买的车辆
  • centos5.7
  • centos编译安装tcpdump工具
  • 无法打开vmx86
  • ubuntu20.04 vim
  • sniffer.exe - sniffer是什么进程
  • win10企业版怎么连接无线网
  • xp录音软件
  • ubuntu安装指南
  • excel实现多选
  • linux系统mysql自动备份并使用ftp上传的方法
  • jquery model
  • javascript如何学
  • android中适配器
  • 报税时一直显示申报中
  • 西安汽车购置税
  • 发票挂失费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号