当前位置: 首页 > news >正文

2017商会网站建设方案广州番禺招聘网最新招聘信息

2017商会网站建设方案,广州番禺招聘网最新招聘信息,wordpress表单的增加与查询,网站域名费用交给谁文章目录1.简介2.用法3.三种状态4.实现原理数据结构原理概述5.小结参考文献1.简介 Golang channel 是一种并发原语#xff0c;用于在不同 goroutine 之间进行通信和同步。本质上#xff0c;channel 是一种类型安全的 FIFO 队列#xff0c;它可以实现多个 goroutine 之间的同… 文章目录1.简介2.用法3.三种状态4.实现原理数据结构原理概述5.小结参考文献1.简介 Golang channel 是一种并发原语用于在不同 goroutine 之间进行通信和同步。本质上channel 是一种类型安全的 FIFO 队列它可以实现多个 goroutine 之间的同步和通信。 channel 是一种引用类型即使是在不同的 goroutine 之间传递channel时它们仍然指向相同的底层数据结构。 2.用法 在 Golang 中可以使用 make 函数创建 channel语法如下 ch : make(chan T)其中T 表示 channel 中元素的类型。 channel 可以使用以下操作来实现同步和通信 发送操作: 用于将数据发送到channel中语法为 ch - data。接收操作: 用于从channel中接收数据语法为 data : - ch。关闭操作: 用于关闭 channel语法为 close(ch)。 需要注意的是发送和接收操作都是阻塞的即如果没有 goroutine 同时进行对应的操作它们将一直阻塞直到其他 goroutine 进行操作为止。而关闭操作是非阻塞的。即使 channel 已经被关闭仍然可以从中读取数据。 3.三种状态 channel 有三种状态未关闭已关闭和 nil。 对三种不同的 channel 进行操作会有不同的结果。 操作未关闭已关闭nil发送阻塞或成功发送panic永久阻塞读取阻塞或成功读取成功读取或返回零值永久阻塞关闭成功关闭panicpanic 4.实现原理 数据结构 channel 是一个结构体运行时使用 runtime.hchango 1.19 runtime/chan.go结构体表示。 type hchan struct {qcount uint // total data in the queuedataqsiz uint // size of the circular queuebuf unsafe.Pointer // points to an array of dataqsiz elementselemsize uint16closed uint32elemtype *_type // element typesendx uint // send indexrecvx uint // receive indexrecvq waitq // list of recv waiterssendq waitq // list of send waiters// lock protects all fields in hchan, as well as several// fields in sudogs blocked on this channel.//// Do not change another Gs status while holding this lock// (in particular, do not ready a G), as this can deadlock// with stack shrinking.lock mutex }字段的具体含义如下 qcount表示当前队列中元素的个数。 dataqsiz表示队列中元素的个数上限即缓冲区大小。 buf指向缓存的环形数组存储实际元素的值。由于 channel 内的元素在堆上分配因此 buf 是一个 unsafe.Pointer 类型的指针。 elemsize表示单个元素的大小以字节为单位。 closed表示 channel 是否已关闭0 表示未关闭1 表示已关闭。 recvx表示下一个被接收的元素在 buf 中的位置。 sendx表示下一个被发送的元素在 buf 中的位置。 recvq接收者的等待队列用于存储等待从 channel 中读取数据的 goroutine。 sendq发送者的等待队列用于存储等待向 channel 中发送数据的 goroutine。 lock保护 channel 的锁防止多个 goroutine 同时访问 channel 时发生竞争条件。这里的 lock 是一个 mutex 类型的变量。 需要注意的是这里的 waitq 和 mutex 分别表示等待队列和互斥锁是 Golang 内部实现 channel 同步和通信机制所需要的结构体由 Golang 运行时库提供支持。 原理概述 在 Golang 中channel 是用于协程之间通信的重要机制其内部实现涉及到以下几个方面 数据结构channel 本质上是一个带有同步功能的队列Go 语言中的 channel 通过数据结构来实现同步和通信。具体而言channel 内部包含了一个指向队列数据的指针和两个指向队列头和尾的索引。 内存管理channel 内部存储的元素是在堆上分配的这意味着在使用 channel 时不用考虑内存分配和回收的问题由 Go 运行时自动管理。 同步机制channel 的本质是一种同步机制因此其内部实现必须包括同步相关的机制以确保通信的正确性。Go 语言采用了类似于信号量的方法实现 channel 的同步即在发送和接收操作时使用锁和条件变量来实现同步。 调度器Golang 中的调度器负责协程的调度和管理其在 channel 的实现中起到了重要的作用。调度器通过在不同协程之间切换来实现 channel 的通信和同步。 具体来说当一个协程试图向 channel 发送数据时调度器会检查 channel 的缓冲区状态。如果 channel 的缓冲区未满则将数据写入缓冲区并唤醒等待接收的协程。如果 channel 的缓冲区已满则当前协程会被阻塞等待其他协程取走缓冲区中的数据。 当一个协程试图从 channel 中接收数据时调度器会检查 channel 的缓冲区状态。如果 channel 的缓冲区非空则将缓冲区中的数据读出并唤醒等待发送的协程。如果 channel 的缓冲区为空则当前协程会被阻塞等待其他协程向缓冲区中写入数据。 在 channel 的实现中Go 语言使用了类似于操作系统中的管道机制以及用于进程间通信的信号量机制通过同步、调度等多种机制实现了协程之间的通信和同步。 5.小结 总的来说channel是Golang中非常重要的并发原语它为多个 goroutine 之间的通信和同步提供了方便而高效的方式。使用channel需要注意它的阻塞特性以及引用类型的特点。channel的底层实现基于管道使用两个goroutine之间的无缓冲管道来进行通信确保操作的顺序满足FIFO的规则。 参考文献 OpenAI ChatGPT Go 语言Channel 实现原理精要 - 面向信仰编程
http://www.w-s-a.com/news/312742/

相关文章:

  • 网站方案组成要素饰品公司网站建设方案
  • 网站改版被降权赣州景文网络科技有限公司
  • 吉林省网站建设推广图片模版
  • 如何做网站热力图佛山 网站关键词优化
  • 个人网站建设论文中期报告申报网站建设理由 模板
  • 岫岩做网站软件开发和app开发的区别
  • 邯郸质量一站式服务平台上线如何做国外销售网站
  • 内蒙古工程建设协会网站sem优化策略
  • Linux网站建设总结建设电子商务平台
  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图
  • wap网站搜索wordpress工作室模板
  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道
  • 学校网站内容四川手机网站开发
  • 网站制作公司违法商业网站运营成本
  • 显示佣金的网站是怎么做的广告设计主要做哪些
  • 做阿里网站的分录济南seo网站排名关键词优化