ios - 在 iOS/Mac 上通过 GCD 实现多线程

标签 ios multithreading macos swift grand-central-dispatch

我正在寻找 Swift 中的一些代码多线程,但我想知道 GCD 如何处理线程。我创建的每个新线程是否自动在单独的内核(如果可用)上运行,或者它是否使用另一种机制将线程分配给内核?

基本上我想要的是防止我创建的新线程在同一个内核上同时运行;我想保证它们在不同的内核上(同样,在它们可用的情况下)。

我不是在为 App Store 或其他任何东西编写应用程序,我只需要它在我的多核机器上的不同内核上运行这些线程。根据我在网上找到的信息,GCD 自行决定是否在不同的内核上运行线程,但我无法确定这是否仅基于可用性或完全基于其他因素。谢谢。

最佳答案

如果您使用 Grand-Central Dispatch API(dispatch_async 等)或使用 GCD 的更高级别的 API(如 NSOperationQueue),GCD 将选择最适合您的线程,因此也是最适合您的内核,具体取决于多种因素。您只能控制 GCD 队列,而不能控制线程或处理器内核。

您也可以使用 NSThread 创建您自己的线程,但通常不推荐这样做,除非您需要在 GCD 之前的操作系统上运行您的代码。我认为保证使用两个不同内核的唯一方法是让一些代码在 mainThread 上运行,另一个在分离的线程上运行。据我所知,您所请求的更精细的控制无法通过公共(public) API 获得。 (我有理由相信使用私有(private) API 是可能的,但我不知道怎么做。)

关于ios - 在 iOS/Mac 上通过 GCD 实现多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615944/

相关文章:

multithreading - 为什么进程调度不叫线程调度?

c++ - 如何修复 macOS pthread 互斥锁性能低下的问题?

macos - OS X、 cocoa : how can an app be signaled when a network connection becomes available?

ios - 如何创建看起来像警报 View 的自定义 View ?

ios - NSDate 快速转换恒定时间问题

c++ - 是否可以向特定 pthread ID 发送信号?

macos - VBA 中 Mac 的 Control + Break 等效项

ios - 防止 UITableViewCell.backgroundView 在方向更改时调整图像大小

ios - 无法使用 JSON 类型的参数列表调用类型 'Int' 的初始值设定项

c# - 如何映射 ImmutableArray 而不将其强制转换为非线程安全的 IEnumerable?