我在玩 Eiffels SCOOP。
在我的程序中,一群工人并行运行。我想创建尽可能多的工人,因为处理器可供我使用。
埃菲尔是否有“简单”的方法来查找可用处理器的数量?
当前的标准库中没有这样的功能。但是,您可以使用以下内容:
frozen available_cpus: NATURAL_8
-- Number of logical CPUs reported by OS.
external
"C inline use %"eif_scoop.h%""
alias
"[
#ifdef EIF_WINDOWS
SYSTEM_INFO sysinfo;
GetSystemInfo (&sysinfo);
return sysinfo.dwNumberOfProcessors;
#elif EIF_MACOSX
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
]"
end