2

在过去的几个月里,在做 iOS 开发时,我对使用ObjectiveC 默认提供的所谓的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
    });
});

只要我愿意,我基本上可以在其他自定义优先级的线程上分叉任务,并且我可以以任何我想要的方式使用结果,而无需花费太多精力在线程之间传递对象、终止线程、然后加入等。根据对于 Wikipedia,该方法的更通用名称是“线程池模式”。

我觉得,就实现并行性而言,这比我过去使用的许多其他解决方案更容易(我在考虑 pthread,但在大多数语言中都有类似的东西)。我想“易用性”的很大一部分来自于 iOS 应用程序(OSX 也是?我自己从来没有写过)为每个线程使用运行循环和任务队列,从而使工作可以分成离散的单元,而不是什么您通常从大多数语言的空白程序框架开始。

因此,问题是,在其他语言中是否有类似 GCD 的东西,或者它不是在 Apple 世界之外流行的模型?我对 Clojure/JVM 特别感兴趣,因为它确实添加了一堆可能类似的并行化抽象,但我也很想了解其他语言。

4

2 回答 2

2

Grand Central Dispatch 的核心是一个线程池。大多数语言都有类似的东西,尽管 GCD 比大多数 IMO 更好。最流行的等效 Java 库是 Fork/Join。Clojure 还包括许多用于处理特定任务的并发函数,但对于更一般的并发,您需要 Fork/Join。

于 2013-01-04T07:36:36.227 回答
0

调度 API 是 C 和开源的。所以它不是 objC 运行时的一部分(尽管运行时使用调度 api!)

类似的东西......嗯......也许是Windows 8下的并行任务库

于 2013-01-04T07:23:16.750 回答