从 Counting Processor Cores in Emacs 这里看到的,记录一下
linux/cygwin提供了 /proc
虚拟文件系统可以获取系统信息,具体来说,在 /proc/cpuinfo
中会列出所有CPU核的信息
(when (file-exists-p "/proc/cpuinfo")
(with-temp-buffer
(insert-file-contents "/proc/cpuinfo")
(how-many "^processor[[:space:]]+:")))
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)))
)))