我想知道通道是否足够高效,可以用作编写 Go 程序的一部分。
3 回答
Go 中的 Channels 不是函数,它们是原始类型,即所谓的语言的一等公民。
与信号量(又名互斥体)相比,强烈建议使用通道,因为如果使用得当,它们可以非常有效地序列化并发访问。
Go 肯定会胜过任何解释型动态语言,并且比许多编译型语言更好地处理并发性。仍然有一些 Go 不够用的用例,例如火箭控制器等,但对于普通的现实世界应用程序,Go 无疑是最快和最灵活的语言之一。
一般来说,是的,频道很快,但我们不知道你是否应该在不了解你的程序的情况下使用它。我想说这部分没有建设性。
至于实现,当您使用源代码安装 Go 时,它是可用的。在 中查找示例src/pkg/runtime/chan.c
。
大多数 Go 并发程序都依赖于通道。如果你想在 Go 中编写代码并执行并发任务,我会说你几乎别无选择:使用频道、配置文件,看看你是否有与频道相关的问题。
你的问题很奇怪,因为显然许多 Go 程序确实有效地使用了通道,所以答案是肯定的。但我认为您可能的意思是:对于我的用例来说,渠道是否足够高效。如果您可以详细说明您的程序应该做什么,那么我可以给您一个更好的答案。
值得一提的是,我使用 Go 编写了许多高性能程序,这些程序需要大量(从几十到几百)个通道通过相似数量的 goroutine 进行通信。所以,是的,总的来说,它们非常有效。