当你运行Mac OS X时,你如何从命令行得知机器上有多少核?在Linux上,我使用:

x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)

虽然不完美,但已经很接近了。这是为了让feedto make,这就是为什么它给出的结果比实际数字高1。我知道上面的代码可以用Perl写得更密集,也可以用grep、wc和cut来写,但我认为上面的代码是简洁和可读性之间的一个很好的折衷。

非常晚的编辑:澄清一下:我问的是有多少逻辑核可用,因为这对应于我想要生成多少同步作业。jkp的回答,经过Chris Lloyd的进一步完善,正是我所需要的。YMMV。


当前回答

更简单:

sysctl -n hw.ncpu

其他回答

在运行Mavericks的MacBook Pro上,sysctl -a | grep hw。CPU只会返回一些神秘的细节。在machdep中显示了更详细和可访问的信息。CPU部分,即:

sysctl -a | grep machdep.cpu

特别是,对于具有超线程(HT)的处理器,您将看到枚举的总CPU计数(logical_per_package)是物理核心计数(cores_per_package)的两倍。

sysctl -a | grep machdep.cpu  | grep per_package

下面的命令提供了关于CPU的所有信息

$ sysctl -a | sort | grep cpu

在最初的问题中没有指定(尽管我在评论中看到OP帖子说这不是一个选项),但macOS上的许多开发人员都安装了Homebrew包管理器。

对于未来偶然遇到这个问题的开发人员,只要存在安装Homebrew的假设(或需求)(例如,在公司的工程组织中),nproc就是coreutils包中包含的通用GNU二进制文件之一。

brew install coreutils

如果你有脚本,你更喜欢写一次(Linux + macOS)而不是两次,或者避免有If块,你需要检测操作系统,知道是否调用nproc vs sysctl -n hw。Logicalcpu,这可能是一个更好的选择。

$ system_profiler | grep 'Total Number Of Cores'

这应该是跨平台的。至少在Linux和Mac OS X上是这样。

python -c 'import multiprocessing as mp; print(mp.cpu_count())'

虽然有点慢,但还是有用的。