Что происходит в этом коде? Из названия и контекста он находит количество ядер на машине, но как это работает? Зачем все это битку?
static int32
getproccount(void)
{
uintptr buf[16], t;
int32 r, cnt, i;
cnt = 0;
r = runtime·sched_getaffinity(0, sizeof(buf), buf);
if(r > 0)
for(i = 0; i < r/sizeof(buf[0]); i++) {
t = buf[i];
t = t - ((t >> 1) & 0x5555555555555555ULL);
t = (t & 0x3333333333333333ULL) + ((t >> 2) & 0x3333333333333333ULL);
cnt += (int32)((((t + (t >> 4)) & 0xF0F0F0F0F0F0F0FULL) * 0x101010101010101ULL) >> 56);
}
return cnt ? cnt : 1;
}
Примечание: игнорировать ·
в runtime·sched_getaffinity
, подумайте об этой строке как о произвольном библиотечном/системном вызове, который делает то, что подразумевает имя и аргументы. (В этом случае этот конкретный вызов происходит от старой версии времени pre-Go1.4, написанной в небольшом варианте C, который имеет дело с ·
).