MPProcessors在Mac OS 10.7中已被弃用。有什么替代品吗?

3
我正在开发一个分形渲染应用程序,其代码可以追溯到10.4。它使用NSThreads来管理渲染线程以计算分形图案。
直到最近,它支持的操作系统版本仍然可以追溯到10.4,因此我甚至无法将其升级为使用NSOperationQueues。
现在,这个名为FractalWorks的应用程序已经在Mac App Store上发布,其最低操作系统要求是10.6.6。因此,我们放弃了对较旧操作系统版本的支持,并将重新设计渲染以使用NSOperationQueues或GCD。
同时,我想让它在新发布的Lion上干净地运行起来。具体来说,我想摆脱在10.7中新近废弃的长列表调用。这个第一次更新将是一个基础升级。
该应用程序目前使用MPProcessors方法来确定系统上的内核数,以便为每个内核创建一个渲染线程。它工作得很好,而且MPProcessors甚至允许i5/i7上的超线程,并让程序创建与内核数量相同两倍的渲染线程。
我需要一种现代调用方法,可以像MPProcessors现在一样让我查询系统的逻辑内核数。文档只是简单地说明该方法已被弃用,没有提供替代方法。有什么替代方案吗?(不要告诉我是GCD/NSOperationQueues。我知道那是正确的方法,但这比我现在准备承担的工作还要大。)
提前致谢,
Duncan Champney WareTo

你知道答案,但不喜欢它,所以希望得到另一个答案? - Caleb
我知道你不想接触GCD或像OpenCL这样的技术,尽管它们也可能非常适合这个问题,但我认为你会发现通过升级到这些技术,你可以节省大量代码并提高性能。我强烈建议你观看Drew McCormack的《雪豹上的并发编程》视频系列,在其中他以分形计算为例展示了这些技术的威力。 - Brad Larson
从长远来看,这是绝对正确的,Caleb/Brad。但如果我已经有一个稳定的代码库,我也会不愿意轻易更改它。 - Jonathan Grynspan
1个回答

5
在 Cocoa 中:[NSProcessInfo processInfo].processorCount 在 BSD 中:sysctlbyname("hw.ncpu", ...) 使用 Gestalt:Gestalt(gestaltCountOfCPUs, &count); 这些代码片段涉及到获取计算机 CPU 核心数量的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接