是否有一个很好的跨平台方法来确定机器在elisp中的处理器数量?我正在尝试让我的配置自动检测一些构建选项,并希望它自动使用处理器的数量+ 1. Grepping/proc/cpuinfo对我来说不是一个解决方案,因为它不适用于Windows.
Emacs 24.3 Lisp无权访问该信息.您的选择似乎包括:
编写一个Elisp库,它使用SYSTEM-TYPE的值来选择一个特定于系统的方法来获取处理器数量;
修改Emacs C源并重建它,以便它可以为Emacs构建的每个可能的多处理器平台公开Lisp级别的处理器计数.
至少,四个小时前,当我第一次开始写这个答案时,这是真的.但后来我对这个问题感兴趣,现在你有了第三个选择:
下载我的system-cores.el库,它实现上面两个选项中的第一个,并调用(system-cores :physical)
获取物理处理器(system-cores :logical)
的数量,获取逻辑核心的数量,或者只是(system-cores)
为了获得包含两者的alist.
注意事项包括:
该库强烈依赖于PROCESS-LINES函数.如果该函数在您需要调用SYSTEM-CORES的上下文中无法做任何合理的事情,那么SYSTEM-CORES也不能.(例如,如果你在Darwin上并且(getenv "PATH")
不包含/usr/sbin
,则PROCESS-LINES会弹出"搜索程序:没有这样的文件或目录,system_profiler".)
目前已知支持的系统是GNU/Linux(任何带/ proc/cpuinfo,或多或少),Windows NT(及其衍生物,包括2000,XP和所有后续版本)和Darwin(OS X,至少10.8,理论上可以追溯到10.2).并非巧合,这些也是我可以访问的系统.
我还包括一个代表,它应该至少可以在某些BSD版本上正常工作,但是我没有可以测试它的BSD盒子,所以不知道它是否真的有效 - 在至少,您几乎肯定需要修改SYSTEM-CORES-SYSCTL委托检查的sysctl列表.
如果您正在使用各种现代Linux,Windows或OS X,那太好了!开箱即用你应该很好.如果没有,并且如果您的平台包含一个命令行实用程序,该实用程序在其结果中提供必要的信息,那么为您的系统编写委托应该不难.或者,如果您不想自己写代理,请给我发电子邮件:
正确调用有问题的命令行实用程序
它在您的系统上生成的输出样本
M-: system-type
Emacs 的输出
M-: system-configuration
Emacs 的输出
我将能够自己编写代理并将其添加到库中.
编辑::cores
和:processors
关键字分别替换为:physical
和:logical
; 我无法保持他们的直率,我也不明白为什么我也应该期待其他人.
编辑:每个@lunaryorn,替换 (split-string (shell-command-to-string ...))
为(process-lines ...)
.这样可以节省调用shell,这可能会使库更可靠,并且肯定会使代码更易于阅读.