linux/cygwin 提供了 /proc 虚拟文件系统可以获取系统信息,具体来说,在 /proc/cpuinfo 中会列出所有 CPU 核的信息
(when (file-exists-p "/proc/cpuinfo")
(with-temp-buffer
(insert-file-contents "/proc/cpuinfo")
(how-many "^processor[[:space:]]+:")))
2
Windows 提供了一个名为 NUMBER_OF_PROCESSORS 的环境变量,里面存的就是核的数量
(let ((number-of-processors (getenv "NUMBER_OF_PROCESSORS")))
(when number-of-processors
(string-to-number number-of-processors)))
需要调用 sysctl 来获取
(with-temp-buffer
(ignore-errors
(when (zerop (call-process "sysctl" nil t nil "-n" "hw.ncpu"))
(string-to-number (buffer-string)))))
通过变量 system-type 可以获得操作系统的类型,不同操作系统调用不同的方法来获取 CPU 核的数量
(defun numcores ()
"Return number of cores"
(case system-type
((gnu/linux cygwin)
(when (file-exists-p "/proc/cpuinfo")
(with-temp-buffer
(insert-file-contents "/proc/cpuinfo")
(how-many "^processor[[:space:]]+:")))
)
((gnu/kfreebsd darwin)
(with-temp-buffer
(ignore-errors
(when (zerop (call-process "sysctl" nil t nil "-n" "hw.ncpu"))
(string-to-number (buffer-string)))))
)
((windows-nt)
(let ((number-of-processors (getenv "NUMBER_OF_PROCESSORS")))
(when number-of-processors
(string-to-number number-of-processors)))
)))
