objective-c - Objective-C 之外有什么类似于 Grand Central Dispatch 的东西吗?

标签 objective-c multithreading parallel-processing threadpool

过去几个月,在进行 iOS 开发时,我非常习惯使用所谓的 Grand Central Dispatch technology ObjectiveC 默认提供。只需几个简单的调用,它就可以让我做一些很棒的事情,例如:

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
    });
});

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

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

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

最佳答案

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

关于objective-c - Objective-C 之外有什么类似于 Grand Central Dispatch 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14152795/

相关文章:

c++ - 使用 openMP 的并行 qsort

parallel-processing - 如何在多台计算机上使用 GNU 并行

objective-c - UIWebView 段落选择样式

iphone - iOS 唯一用户标识符

objective-c - 检查 NSString 是否包含来自不同 NSString 的字符

ios - 使用相机时从不调用 Affdex AFDXDetector 委托(delegate)函数?

multithreading - Rx 调度程序和线程亲和性

ios - 操作状态不是线程安全的 Swift

multithreading - 如何在没有Arc的线程中使用互斥锁?

randomForestSRC 包 R 中的 rfsrc() 命令不使用多核功能