win: compute parallelism from process cpu affinity (#4521)
Use GetProcessAffinityMask() to estimate the available parallelism. Before this commit, it simply used the number of available CPUs. Fixes: https://github.com/libuv/libuv/issues/4520
This commit is contained in:
parent
b5eb41d882
commit
58dfb6c89b
@ -512,19 +512,23 @@ int uv_uptime(double* uptime) {
|
|||||||
|
|
||||||
|
|
||||||
unsigned int uv_available_parallelism(void) {
|
unsigned int uv_available_parallelism(void) {
|
||||||
SYSTEM_INFO info;
|
DWORD_PTR procmask;
|
||||||
unsigned rc;
|
DWORD_PTR sysmask;
|
||||||
|
int count;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* TODO(bnoordhuis) Use GetLogicalProcessorInformationEx() to support systems
|
/* TODO(bnoordhuis) Use GetLogicalProcessorInformationEx() to support systems
|
||||||
* with > 64 CPUs? See https://github.com/libuv/libuv/pull/3458
|
* with > 64 CPUs? See https://github.com/libuv/libuv/pull/3458
|
||||||
*/
|
*/
|
||||||
GetSystemInfo(&info);
|
count = 0;
|
||||||
|
if (GetProcessAffinityMask(GetCurrentProcess(), &procmask, &sysmask))
|
||||||
|
for (i = 0; i < 64; i++) /* a.k.a. count = popcount(procmask); */
|
||||||
|
count += 1 & (procmask >> i);
|
||||||
|
|
||||||
rc = info.dwNumberOfProcessors;
|
if (count > 0)
|
||||||
if (rc < 1)
|
return count;
|
||||||
rc = 1;
|
|
||||||
|
|
||||||
return rc;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user