在过去的几个月里,当我在做iOS开发的时候,我非常习惯使用objective - c默认提供的所谓的Grand Central Dispatch技术。通过几个简单的调用,它允许我做一些很棒的事情,比如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Do stuff on the lowest priority queue here
dispatch_async(dispatch_get_main_queue(), ^{
// Do stuff with the above results here back in main thread/queue
});
});
只要我喜欢,我基本上可以在自定义优先级的其他线程上分叉任务,并且我可以以任何我想要的方式使用结果,而不必在线程之间传递对象,终止线程,加入线程等方面投入太多精力。根据维基百科,这种方法更通用的名称是"线程池模式"。
我觉得,就实现并行性而言,这比我过去使用过的许多其他解决方案更容易(我认为是pthread,但在大多数语言中都有类似的东西)。我猜"易用性"的很大一部分来自于iOS应用(OSX也是?我自己从来没有写过)为每个线程使用运行循环和任务队列,从而使工作可分离成离散的单元,而不是在大多数语言中通常从空白的程序框架开始。
问题是,在其他语言中是否存在类似GCD的东西,或者它不是苹果世界之外流行的模式?我对Clojure/JVM特别感兴趣,因为它确实添加了一堆可能类似的并行化抽象,但我也想知道其他语言的相同情况。
Grand Central Dispatch的核心是一个线程池。大多数语言都有类似的东西,尽管GCD比大多数语言更好。最流行的等价Java库是Fork/Join。Clojure还包括许多用于处理特定任务的并发函数,但对于更一般的并发性,您需要Fork/Join。
调度API是用C语言编写的,并且是开源的。所以它不是objC运行时的一部分(尽管运行时使用调度api!)
类似的东西. .嗯……也许是Windows 8下的并行任务库