fidry/cpu-core-counter

一个小巧的工具,用于获取CPU核心数量。

资助包维护!
theofidry

1.2.0 2024-08-06 10:04 UTC

This package is auto-updated.

Last update: 2024-08-30 16:14:59 UTC


README

此包是一个小巧的工具,用于获取CPU核心数量。

composer require fidry/cpu-core-counter

用法

use Fidry\CpuCoreCounter\CpuCoreCounter;
use Fidry\CpuCoreCounter\NumberOfCpuCoreNotFound;
use Fidry\CpuCoreCounter\Finder\DummyCpuCoreFinder;

$counter = new CpuCoreCounter();

// For knowing the number of cores you can use for launching parallel processes:
$counter->getAvailableForParallelisation()->availableCpus;

// Get the number of CPU cores (by default it will use the logical cores count):
try {
    $counter->getCount();   // e.g. 8
} catch (NumberOfCpuCoreNotFound) {
    return 1;   // Fallback value
}

// An alternative form where we not want to catch the exception:

$counter = new CpuCoreCounter([
    ...CpuCoreCounter::getDefaultFinders(),
    new DummyCpuCoreFinder(1),  // Fallback value
]);

// A type-safe alternative form:
$counter->getCountWithFallback(1);

// Note that the result is memoized.
$counter->getCount();   // e.g. 8

高级用法

更改查找器

当创建 CpuCoreCounter 时,你可能想更改使用查找器的顺序或禁用特定查找器。你可以通过传递你想要的查找器来轻松做到这一点。

// Remove WindowsWmicFinder 
$finders = array_filter(
    CpuCoreCounter::getDefaultFinders(),
    static fn (CpuCoreFinder $finder) => !($finder instanceof WindowsWmicFinder)
);

$cores = (new CpuCoreCounter($finders))->getCount();
// Use CPUInfo first & don't use Nproc
$finders = [
    new CpuInfoFinder(),
    new WindowsWmicFinder(),
    new HwLogicalFinder(),
];

$cores = (new CpuCoreCounter($finders))->getCount();

仅选择逻辑或物理查找器

FinderRegistry 提供了两个有用的条目

  • ::getDefaultLogicalFinders():提供一个查找器列表,这些查找器将查找 逻辑 CPU 核心数量。
  • ::getDefaultPhysicalFinders():提供一个查找器列表,这些查找器将查找 物理 CPU 核心数量。

默认情况下,使用 CpuCoreCounter 时,它将使用逻辑查找器,因为这是你更可能需要的东西,也是 PHP 源码构建 PHP 可执行文件时使用的东西。

检查系统上的查找器能找到什么

你有三个脚本来提供有关查找器能找到什么的见解

# Checks what each given finder will find on your system with details about the
# information it had.
make diagnose                                     # From this repository
./vendor/fidry/cpu-core-counter/bin/diagnose.php  # From the library

并且

# Execute all finders and display the result they found.
make execute                                     # From this repository
./vendor/fidry/cpu-core-counter/bin/execute.php  # From the library

调试找到的结果

你有 3 个方法可以帮助你找出发生了什么

  1. 如果你使用的是查找器注册表的默认配置,你可以查看上一节,这将提供大量信息。
  2. 如果你感兴趣的是找到多少 CPU 核心,你可以使用 CpuCoreCounter::trace() 方法。
  3. 如果你感兴趣的是并行化可用的 CPU 核心的计算方式,你可以检查 CpuCoreCounter::getAvailableForParallelisation() 返回的 ParallelisationResult 的值。

向后兼容承诺 (BCP)

该策略基本上与 Symfony 的承诺 相同。请注意,标记为 @private@internal 的代码不包括在 BCP 中。

以下元素也排除在外

  • diagnoseexecute 命令:这些仅用于调试/检查目的
  • FinderRegistry::get*Finders():可以随时添加新的查找器或更改查找器的顺序

许可证

此包使用 MIT 许可证授权。

请参阅 LICENSE.md