fidry / cpu-core-counter
一个小巧的工具,用于获取CPU核心数量。
1.2.0
2024-08-06 10:04 UTC
Requires
- php: ^7.2 || ^8.0
Requires (Dev)
- fidry/makefile: ^0.2.0
- fidry/php-cs-fixer-config: ^1.1.2
- phpstan/extension-installer: ^1.2.0
- phpstan/phpstan: ^1.9.2
- phpstan/phpstan-deprecation-rules: ^1.0.0
- phpstan/phpstan-phpunit: ^1.2.2
- phpstan/phpstan-strict-rules: ^1.4.4
- phpunit/phpunit: ^8.5.31 || ^9.5.26
- webmozarts/strict-phpunit: ^7.5
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 个方法可以帮助你找出发生了什么
- 如果你使用的是查找器注册表的默认配置,你可以查看上一节,这将提供大量信息。
- 如果你感兴趣的是找到多少 CPU 核心,你可以使用
CpuCoreCounter::trace()
方法。 - 如果你感兴趣的是并行化可用的 CPU 核心的计算方式,你可以检查
CpuCoreCounter::getAvailableForParallelisation()
返回的ParallelisationResult
的值。
向后兼容承诺 (BCP)
该策略基本上与 Symfony 的承诺 相同。请注意,标记为 @private
或 @internal
的代码不包括在 BCP 中。
以下元素也排除在外
diagnose
和execute
命令:这些仅用于调试/检查目的FinderRegistry::get*Finders()
:可以随时添加新的查找器或更改查找器的顺序
许可证
此包使用 MIT 许可证授权。
请参阅 LICENSE.md
。