如何计算PHP脚本(linux)中的处理器核心数?

mnv*_*mnv 7 php linux pthreads

我正在尝试使用pthreads进行多线程处理.我正在用构造函数创建池.第一个参数是Workers的数量.

$pool = new Pool(8, 'WebWorker');
Run Code Online (Sandbox Code Playgroud)

我想自动检测处理器核心数.像这样的东西:

$pool = new Pool(get_processor_cores_number(), 'WebWorker');
Run Code Online (Sandbox Code Playgroud)

如何使用PHP?

tek*_*ver 9

如果服务器是 Linux 机器,您可以使用以下代码段来完成:

$ncpu = 1;

if(is_file('/proc/cpuinfo')) {
    $cpuinfo = file_get_contents('/proc/cpuinfo');
    preg_match_all('/^processor/m', $cpuinfo, $matches);
    $ncpu = count($matches[0]);
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该更快: `$ncpu = substr_count((string)@file_get_contents('/proc/cpuinfo'),"\nprocessor")+1;` - 首先 substr_count 比 preg_match_all 更快,并且我们只执行一次打开() 而不是 2,如果文件不可读,substr_count 返回 0,+1 将 0 变成 1,但是当文件可读时,substr_count 将跳过第一个处理器,因为它不是以换行符开头,而 + 1 也说明了这一点:) (2认同)

oli*_*iaz 7

你可以做类似的事情,当然你的服务器应该在linux中:

function get_processor_cores_number() {
    $command = "cat /proc/cpuinfo | grep processor | wc -l";

    return  (int) shell_exec($command);
}
Run Code Online (Sandbox Code Playgroud)

您将执行shell命令,然后将其强制转换为int.

  • `cat/proc/cpuinfo | grep处理器| wc -l`是完全丑陋的.你可以用一个进程而不是三个和两个管道来做同样的事情:`grep -c processor/proc/cpuinfo` (4认同)

Ari*_*was 5

如果有人正在寻找一个简单的函数来获取WindowsLinux两个操作系统的总 CPU 内核。

function get_processor_cores_number() {
    if (PHP_OS_FAMILY == 'Windows') {
        $cores = shell_exec('echo %NUMBER_OF_PROCESSORS%');
    } else {
        $cores = shell_exec('nproc');
    }

    return (int) $cores;
}
Run Code Online (Sandbox Code Playgroud)