有个多任务类,每个任务其实是开一个线程,在不同该平台,要根据不同的核心数开到最合适的任务数。不然,固定的任务数,会导致低配置机器卡顿或者高配置机器不能发挥最好性能。
// tested on windows, macos, centos, Android(mi)
#ifdef WIN32
# include <windows.h>
#elif MACOS
# include <sys/param.h>
# include <sys/sysctl.h>
#else
# include <unistd.h>
#endif
int get_cpu_core_num()
{
#ifdef WIN32
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
return sysinfo.dwNumberOfProcessors;
#elif MACOS
int nm[2];
size_t len = 4;
uint32_t count;
nm[0] = CTL_HW;
nm[1] = HW_AVAILCPU;
sysctl(nm, 2, &count, &len, NULL, 0);
if(count < 1)
{
nm[1] = HW_NCPU;
sysctl(nm, 2, &count, &len, NULL, 0);
if(count < 1)
count = 1;
}
return count;
#else
return sysconf(_SC_NPROCESSORS_ONLN);
#endif
}