gpt4 book ai didi

go - Go channel 是如何实现的?

转载 作者:IT老高 更新时间:2023-10-28 12:58:17 25 4
gpt4 key购买 nike

在(简要地)回顾了 Go 语言规范、有效的 Go 和 Go 内存模型之后,我仍然有点不清楚 Go channel 是如何工作的。

它们是什么样的结构?它们的行为有点像线程安全队列/array。

它们的实现是否依赖于架构?

最佳答案

channel 的源文件(来自您的 go 源代码根目录)位于 /src/pkg/runtime/chan.go .

hchan是 channel 的中心数据结构,带有发送和接收链表(保存指向它们的 goroutine 和数据元素的指针)和 closed 标志。在 runtime2.go 中定义了一个 Lock 嵌入式结构,根据操作系统用作互斥体(futex)或信号量。锁定实现在 lock_futex.go (Linux/Dragonfly/Some BSD) 或 lock_sema.go (Windows/OSX/Plan9/Some BSD) 中,基于构建标签。

Channel操作都在这个chan.go文件中实现,所以可以看到makechan、send和receive操作,以及select构造、close、len和cap内置。

如需深入了解 channel 的内部工作原理,请阅读 Go channels on steroids由 Dmitry Vyukov 本人(Go 核心开发、goroutines、调度程序和 channel 等)编写。

关于go - Go channel 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com