4

我在客户端使用 Om,并且在应用程序的整个生命周期中,许多组件都会被安装/卸载。安装后,会打开各种通道(在 go 块中)。我也打算使用 IWillUnmount 来关闭它们。但首先,我的问题是:未封闭的渠道会发生什么?他们使用的资源是否被释放?从长远来看,不关闭通道(卸载组件时)会降低浏览器的性能吗?谢谢。

4

1 回答 1

3

基于对实现的粗略阅读,如果未关闭的通道有资格被垃圾收集,它们不应使用资源。这意味着发送者和接收者都不能保留对它们的引用(或者也必须有资格收集)。

关闭通道所做的一切都是清空其缓冲区,并将其标记为已关闭,以便无法将任何内容添加到缓冲区中。如果它的缓冲区中没有任何消息,则开放通道将使用与封闭通道相同的资源。

https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L110

于 2014-08-09T18:16:49.537 回答