【发布时间】:2011-11-12 13:15:42
【问题描述】:
什么是 POSIX 或 x86、x86-64 特定系统调用来确定系统在不超额订阅的情况下可以运行的最大线程数?谢谢。
【问题讨论】:
-
除非你知道你是唯一运行的进程,并且你的所有线程都将保持满负荷,否则“你可以运行的线程数而不超额订阅”不是一个非常明确的概念,并且可以动态变化。
什么是 POSIX 或 x86、x86-64 特定系统调用来确定系统在不超额订阅的情况下可以运行的最大线程数?谢谢。
【问题讨论】:
它使用与 C 兼容的结构,那么为什么不直接使用实际代码呢? [libs/thread/src/*/thread.cpp]
使用 pthread 库:
unsigned thread::hardware_concurrency()
{
#if defined(PTW32_VERSION) || defined(__hpux)
return pthread_num_processors_np();
#elif defined(__APPLE__) || defined(__FreeBSD__)
int count;
size_t size=sizeof(count);
return sysctlbyname("hw.ncpu",&count,&size,NULL,0)?0:count;
#elif defined(BOOST_HAS_UNISTD_H) && defined(_SC_NPROCESSORS_ONLN)
int const count=sysconf(_SC_NPROCESSORS_ONLN);
return (count>0)?count:0;
#elif defined(_GNU_SOURCE)
return get_nprocs();
#else
return 0;
#endif
}
在窗口中:
unsigned thread::hardware_concurrency()
{
SYSTEM_INFO info={{0}};
GetSystemInfo(&info);
return info.dwNumberOfProcessors;
}
【讨论】: