我发现x264使用sysconf(_SC_NPROCESSORS_CONF)而不是sysconf(SC_NPROCESSORS_ONLN)来获取CPU核心的数量。
下面是X 264/公用/cpu.c中的代码片段
...
#ifdef __ANDROID__
// Android NDK does not expose sched_getaffinity
return sysconf( _SC_NPROCESSORS_CONF );
#else
...
....我发现了_SC_NPROCESSORS_CONF和_SC_NPROCESSORS_ONLN在手册中的区别
sysconf (_SC_NPROCESSORS_CONF),它返回操作系统配置的处理器数。但是操作系统可能会禁用单个处理器,因此调用sysconf (_SC_NPROCESSORS_ONLN)返回当前在线(即可用)的处理器数。
我有两个问题:
发布于 2017-11-04 23:57:53
事实上,如果您查看所引用的源文件,它在Linux (非Android)上没有使用这两个源文件;而是在自己的线程上调用(2),并计算返回掩码中的1位数。
Linux系统可以支持“热插拔”CPU;这意味着可用CPU的数量可以随时间而变化,而无需重新启动。这可能是高可用性集群中的容错措施。或者它也可以是一种节能措施,例如在移动设备或嵌入式设备中。因此,x264显然试图在可用的情况下利用这一功能,只会回到必须使用的不太动态的选项。
https://stackoverflow.com/questions/47111338
复制相似问题