Количество доступных процессоров, использующих Eiffel
Я играю с Eiffels SCOOP.
В моей программе куча рабочих работает параллельно. Я хочу создать столько рабочих, сколько доступно мне процессоров.
Есть ли и "легкий" способ в Eiffel узнать количество доступных процессоров?
1 ответ
Решение
В текущей стандартной библиотеке такой функции нет. Однако вы можете использовать следующее:
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