我刚才才知道Google的编程语言Go。我一直对它提供的并发支持很感兴趣,并着手对它进行更多的了解。但是,我想了解Go是如何实现并发性的一个特性,到目前为止我还没有看到任何证据表明这个特性完全存在。是否有可能从Go中的一些goroutines中收到结果?
下面是一个假设情况:假设我们正在编写一个函数来确定特定输入的Foo值。对于任何给定的输入,Foo值可以在域A或域B中找到(不在两者中)。在这些领域进行搜索的技术是完全不同的,但他们共享成功的搜索往往会很快返回的属性,而不成功的搜索必须经过整个数据集才能详尽无遗,因此需要很长时间。
现在,在采用并发的其他语言(如Cilk)中,可以编写函数Foosearch,以便生成一个Asearch函数和一个Bsearch函数。这些函数可以同时运行,并且每当或者都得出答案时,该答案将被报告给调用函数Foosearch,该函数将终止它所产生的没有返回的任何函数。
然而,使用Go的goroutines,看起来您只能将两个例程与一个频道连接 - 因此您无法设置Asearch或Bsearch可以发送的频道,具体取决于哪个频道首先找到答案,以及有Foosearch从它读取。它也看起来像你不能从一个渠道读取没有阻止它 - 所以你不能让Foosearch启动Asearch和Bsearch,并从两个渠道建立渠道,然后运行在一个循环检查,看看是否有一个产生一个答案。
我对Go的并发性限制的理解是否正确?是否有另一种方法来实现给定的结果?