我正在寻找 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/