gpt4 book ai didi

go - 比较 Clojure 的 go-blocks 与 Go 的 goroutines 的用法

转载 作者:IT王子 更新时间:2023-10-29 02:11:49 25 4
gpt4 key购买 nike

我试图了解 Clojure 的 go-blocks 与 Go 的 goroutines 的实现特征和由此产生的性能。

在 Clojure 中 >!!<!!阻塞当前线程,这意味着它们只能在显式创建线程时使用(否则“唯一的”主线程被阻塞)。 >!<!正在 parking ,因为 go宏管理一个兼顾多个“进程”的隐式状态机。

然而,在 Go 中,这一切都隐藏在运行时中,goroutines 扮演着这两个角色。

那么说 Clojure 代码在仅使用 parking 版本时等同于 Go 是否正确?由于 go 中有一个线程池宏,这有点像 Go 的线程池底层 goroutines。除了性能会更差,因为 Go 在运行时执行此操作,而 Clojure 在 Clojure 代码中显式管理它?

最佳答案

从广义上讲,是的,Clojure 的行为 go使用“ parking ”时宏类似于“goroutines”<!>! .

但是,任何性能影响都可能高度特定于工作负载和环境:操作系统、内核数量、堆大小等。

Clojure 的 go宏将其内容编译成一个由许多小函数组成的状态机,这些函数是 dispatched通过标准 Java thread pool .现在 Clojure 实现中没有实现任何其他调度。

Go 语言有自己的“goroutines”内部调度程序,它可以根据内部运行时知识进行更复杂的调度。它还提供了“goroutines”的运行时检查,这在 Clojure 的 go 中是不可能的。宏。

关于go - 比较 Clojure 的 go-blocks 与 Go 的 goroutines 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250700/

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