在过去几个月中,在进行iOS开发时,我非常习惯使用ObjectiveC默认提供的所谓Grand Central Dispatch technology。只需几个简单的调用,它就可以让我做一些很棒的事情,比如:
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
});
});
我可以基本上在我想要的时候在自定义优先级的其他线程上分叉任务,并且我可以以任何我想要的方式使用结果,而无需花费太多精力在线程之间传递对象,终止线程,然后加入根据维基百科,该方法的更通用的名称是“thread pool pattern”。
我觉得,就实现并行性而言,这比我过去使用的许多其他解决方案更容易(我正在思考pthreads,但在大多数语言中都有类似的东西)。我认为“易用性”的很大一部分来自这样一个事实:iOS应用程序(OSX也从未自己编写过)使用每个线程的运行循环和任务队列,因此可以将工作分离为离散单元,而不是你通常从大多数语言的空白程序框架开始。
问题是,在其他语言中是否存在类似GCD的内容,或者它不是Apple界外流行的模型?我对Clojure / JVM特别感兴趣,因为它确实增加了一些可能类似的并行化抽象,但我也想知道其他语言也是如此。
答案 0 :(得分:2)
Grand Central Dispatch的核心是一个线程池。大多数语言有类似的东西,虽然GCD比大多数IMO更好。最受欢迎的等效Java库是Fork / Join。 Clojure还包含许多用于处理特定任务的并发函数,但是对于更一般的并发性,您需要Fork / Join。
答案 1 :(得分:0)
调度API在C和开源中。所以它不是objC运行时的一部分(尽管运行时使用了dispatch api!)
类似的事...... mhm ....也许是Windows 8下的Parallel Task Lib