【发布时间】:2015-07-04 23:26:27
【问题描述】:
我是第一次看 Clojure core.async,正在阅读 Rich Hickey 的精彩演示:http://www.infoq.com/presentations/clojure-core-async
我对他在演示结束时展示的示例有疑问:
根据 Rich 的说法,这个示例主要是尝试获取特定查询的网络、视频和图像结果。它为每个结果并行尝试两个不同的来源,并为每个结果提取最快的结果。整个操作可能需要不超过 80 毫秒,所以如果我们不能得到例如80ms的图像结果,我们就放弃了。 'fastest' 函数创建并返回一个新通道,并启动两个 go 进程竞相检索结果并将其放在通道上。然后我们从“最快”通道中取出第一个结果并将其放到 c 通道上。
我的问题:在我们获得第一个结果后,这三个临时的、未命名的“最快”频道会发生什么?据推测,仍然有一个 go 进程试图将第二个结果放到通道上,但没有人在听,所以它实际上从未完成。而且由于通道永远不会绑定到任何东西,所以我们似乎再也没有办法用它做任何事情了。 go 进程和通道会“意识到”没有人再关心他们的结果并清理自己吗?还是我们本质上只是在这段代码中“泄露”了三个通道/go 进程?
【问题讨论】:
标签: clojure core.async