Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS上检测双核CPU?_Ios - Fatal编程技术网

如何在iOS上检测双核CPU?

如何在iOS上检测双核CPU?,ios,Ios,我的应用程序使用NSOperationQueue在后台线程中缓存缩略图。在iPad2上,我可以将并发任务计数限制提高到5或6,但在iPad1这样的单核设备上,这会使UI陷入瘫痪 因此,我想检测双核设备(目前只有iPad2)并适当调整并发限制。我知道我不应该检查型号,而应该检查设备功能。那么,我应该寻找什么设备功能来告诉我cpu是否是双核的呢?除此之外,您可以通过系统调用获得这些信息 NSDictionary dictionaryWithObjectsAndKeys: [self mach

我的应用程序使用
NSOperationQueue
在后台线程中缓存缩略图。在iPad2上,我可以将并发任务计数限制提高到5或6,但在iPad1这样的单核设备上,这会使UI陷入瘫痪


因此,我想检测双核设备(目前只有iPad2)并适当调整并发限制。我知道我不应该检查型号,而应该检查设备功能。那么,我应该寻找什么设备功能来告诉我cpu是否是双核的呢?

除此之外,您可以通过系统调用获得这些信息

NSDictionary dictionaryWithObjectsAndKeys:
    [self machineType],@"MachineType",
    [self humanMachineType],@"HumanMachineType",
    [self powerPCTypeString],@"ProcessorType",
    [NSNumber numberWithLong:
                     [self processorClockSpeed]],
                         @"ProcessorClockSpeed",
    [NSNumber numberWithLong:
                     [self processorClockSpeedInMHz]],
                         @"ProcessorClockSpeedInMHz",
    [NSNumber numberWithInt:[self countProcessors]],
                     @"CountProcessors",
    [self computerName],@"ComputerName",
    [self computerSerialNumber],@"ComputerSerialNumber",
    [self operatingSystemString],@"OperatingSystem",
    [self systemVersionString],@"SystemVersion",        
    nil];
这是参考资料。。。 我想:

sysctl(HW_NCPU) 

应该有用

您可以从以下位置修改代码:

方法1
NSProcessInfo
还有一个
processorCount
属性。了解差异

方法2
#包括
无符号整数countCores()
{
主机\基本信息\数据\主机信息;
马赫数信息类型信息计数;
infoCount=主机\基本\信息\计数;
主机信息(mach_host_self()、主机基本信息、(主机信息)和主机信息以及信息计数);
返回(未签名整数)(hostInfo.max_CPU);
}
方法3
#包括
无符号整数countCores()
{
尺寸透镜;
无符号整数ncpu;
len=sizeof(ncpu);
sysctlbyname(“hw.ncpu”,&ncpu,&len,NULL,0);
返回ncpu;
}
只需使用:


[[NSProcessInfo processInfo]processorCount]

我想这需要一个单独的答案,而不是注释:

我想知道,既然苹果用A10 fusion带来了更多的不对称处理,那么内核的数量意味着什么?我们有2.2芯还是4芯?苹果忽略了让activeProcessorCount浮动来解释它的分形性质。注意,即使在核聚变之前也是如此,因为当时他们可能有热节流。他们需要修复nsoperationqueue的Overwittal,或者为activeProcessorCount提出一个等效的浮点值,并反对activeProcessorCount的当前形式,因为在最近的硬件改进中,activeProcessorCount正在失去其效用

所以摩尔定律被遗忘的速度越快,或者接收到一个闪亮的新常数的速度越快 核计数变得越来越没有意义。除非你在写什么 极客板凳42,多核评分版

生活在2016年末,为了解决你所面临的根本问题,而不是通过max concurrent operation prop进行黑客攻击 您已将NSOperationQueue的QoS调整为.Background

我认为这是一个更干净的方式来解决你的问题与现代 ios sdk然后使用albertamg提供的绳子英里数计算内核

也请看一看 NSProcessInfoThermalStateDidChangeNotification(macos)和NSProcessInfo.lowPowerModeEnabled(ios) (我想这是观察NSProcessInfoThermalStateDidChangeNotification的另一种选择 是到ActiveProcessor上的KVo计数新值)

如果你开始考虑这些新的现实,神奇的常数就会改变 因为乘以核心计数会很快变得有趣。。。 随着新硬件从cupertino推出,它也开始腐烂

在当前的情况下,也很容易做到这一点 Apple hw的zoo,以使套接字级网络正常工作: 可行,但在有阴影的杯中选择少数
正在检查质量;-)

Swift中,您可以使用以下代码检测/打印活动处理器的数量:

let processInfo = ProcessInfo()
print(processInfo.activeProcessorCount)

这段代码不需要任何额外的头文件或框架,完全以本机方式工作

看这个问题:谢谢,但我已经看过了。这可能有点迂腐,但我宁愿不检测摄像头,因为我不能保证将来不会有没有摄像头的双核设备。为什么您觉得需要手动调整并发操作计数?来自并发编程指南:“操作队列与系统一起工作,将并发操作的数量限制为适合可用内核和系统负载的值。”GCD全局并发队列也应该在没有任何手动干预的情况下进行适当的负载平衡。如果我将并发任务限制保留为默认值,则滚动GUI(带有大缩略图的UITableView)会非常不平稳。将任务限制限制限制为1可减少单核设备的抖动,将其限制为3或4可减少双核设备的抖动。@damian,我也看到过完全相同的情况。我发现让NSOpQ处理线程本身往往会过度提交CPU,运行速度会慢得多。我花了好几个小时试图找到可靠的方法,让NSOpQ的默认值能够像手动设置maxConcurrentOperationsCount一样快速、轻松地工作,而这些操作都是CPU限制的,并且您有很多操作;链接很有用,但是链接中唯一有用的信息是实际的方法实现,而不是如何调用它们。虽然这很有用,但我不喜欢传递硬编码字符串容易出错的特性。另外,我内心的守财奴注意到,当一个简单的
==
在一个原语类型上运行时,在其中的某个地方将出现一个
strcmp
。)@paullj1链接似乎断开了如果你想要物理核心,像我一样,那么使用键hw.physicalcpui如果你想要物理核心,像我一样,那么使用键hw.physicalcpup对建议投赞成票:不要尝试根据指标猜测来影响自己的队列优先级;在iOS 8+上,只需设置队列优先级,让操作系统来处理。谢谢,我已经在我的回答中添加了更多的素材,用于usenet flame war在操场上展示8个核心。即使我的MacBook只有4个内核。它显示线程还是线程?
[[NSProcessInfo processInfo] activeProcessorCount];
#include <mach/mach_host.h>

unsigned int countCores()
{
  host_basic_info_data_t hostInfo;
  mach_msg_type_number_t infoCount;

  infoCount = HOST_BASIC_INFO_COUNT;
  host_info( mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount ) ;

  return (unsigned int)(hostInfo.max_cpus);
}
#include <sys/sysctl.h>

unsigned int countCores()
{
  size_t len;
  unsigned int ncpu;

  len = sizeof(ncpu);
  sysctlbyname ("hw.ncpu",&ncpu,&len,NULL,0);

  return ncpu;
}
let processInfo = ProcessInfo()
print(processInfo.activeProcessorCount)