2016-05-01 86 views
1

我正在嘗試使用pthreads進行多線程。我正在使用構造函數創建池。第一個參數是工人數量。如何計算PHP腳本(linux)中的處理器核心數量?

$pool = new Pool(8, 'WebWorker'); 

我想自動檢測處理器內核的數量。類似這樣的:

$pool = new Pool(get_processor_cores_number(), 'WebWorker'); 

PHP怎麼可能?

回答

2

你可以做這樣的事情,當然你的服務器應該是在Linux中:

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

    return (int) shell_exec($command); 
} 

您將執行shell命令,然後將它轉換爲int。

+0

PHP不必須用於此目的的任何內置的功能? – mnv

+0

我不知道任何原生的php函數能夠實現這一點。 – olibiaz

+0

'cat/proc/cpuinfo | grep處理器| wc -l是非常醜陋的。 您可以使用單個進程而不是三個和兩個管道執行相同的操作: 'grep -c processor/proc/cpuinfo' –

2

這裏是一個擴展的sysconf暴露:krakjoe/sysconf

<?php 
$cpusConfigured = sysconf(SYSCONF_NPROCESSORS_CONF); 
$cpusOnline  = sysconf(SYSCONF_NPROCESSORS_ONLN); 
?> 

大多數應用程序只在乎配置的號碼。

1

如果服務器是一臺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]); 
}