获取emacs中的处理器数量

 溪边莎草 发布于 2023-02-09 13:20

是否有一个很好的跨平台方法来确定机器在elisp中的处理器数量?我正在尝试让我的配置自动检测一些构建选项,并希望它自动使用处理器的数量+ 1. Grepping/proc/cpuinfo对我来说不是一个解决方案,因为它不适用于Windows.

1 个回答
  • 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-typeEmacs 的输出

    M-: system-configurationEmacs 的输出

    我将能够自己编写代理并将其添加到库中.

    编辑::cores:processors关键字分别替换为:physical:logical; 我无法保持他们的直率,我也不明白为什么我也应该期待其他人.

    编辑:每个@lunaryorn,替换 (split-string (shell-command-to-string ...))(process-lines ...).这样可以节省调用shell,这可能会使库更可靠,并且肯定会使代码更易于阅读.

    2023-02-09 13:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有