rector/vendor/fidry/cpu-core-counter/README.md

115 lines
2.9 KiB
Markdown
Raw Permalink Normal View History

# CPU Core Counter
This package is a tiny utility to get the number of CPU cores.
```sh
composer require fidry/cpu-core-counter
```
## Usage
```php
use Fidry\CpuCoreCounter\CpuCoreCounter;
use Fidry\CpuCoreCounter\NumberOfCpuCoreNotFound;
use Fidry\CpuCoreCounter\Finder\DummyCpuCoreFinder;
$counter = new CpuCoreCounter();
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
]);
$counter->getCount(); // e.g. 8
```
## Advanced usage
### Changing the finders
When creating `CpuCoreCounter`, you may want to change the order of the finders
used or disable a specific finder. You can easily do so by passing the finders
you want
```php
// Remove WindowsWmicFinder
$finders = array_filter(
CpuCoreCounter::getDefaultFinders(),
static fn (CpuCoreFinder $finder) => !($finder instanceof WindowsWmicFinder)
);
$cores = (new CpuCoreCounter($finders))->getCount();
```
```php
// Use CPUInfo first & don't use Nproc
$finders = [
new CpuInfoFinder(),
new WindowsWmicFinder(),
new HwLogicalFinder(),
];
$cores = (new CpuCoreCounter($finders))->getCount();
```
### Choosing only logical or physical finders
`FinderRegistry` provides two helpful entries:
- `::getDefaultLogicalFinders()`: gives an ordered list of finders that will
look for the _logical_ CPU cores count
- `::getDefaultPhysicalFinders()`: gives an ordered list of finders that will
look for the _physical_ CPU cores count
By default when using `CpuCoreCounter`, it will use the logical finders since
it is more likely what you are looking for and is what is used by PHP source to
build the PHP binary.
### Checks what finders find what on your system
You have two commands available that provides insight about what the finders
can find:
```
$ make diagnose # From this repository
$ ./vendor/fidry/cpu-core-counter/bin/diagnose.php # From the library
```
And:
```
$ make execute # From this repository
$ ./vendor/fidry/cpu-core-counter/bin/execute.php # From the library
```
## Backward Compatibility Promise (BCP)
The policy is for the major part following the same as [Symfony's one][symfony-bc-policy].
Note that the code marked as `@private` or `@internal` are excluded from the BCP.
The following elements are also excluded:
- The `diagnose` and `execute` commands: those are for debugging/inspection purposes only
- `FinderRegistry::get*Finders()`: new finders may be added or the order of finders changed at any time
## License
This package is licensed using the MIT License.
Please have a look at [`LICENSE.md`](LICENSE.md).
[symfony-bc-policy]: https://symfony.com/doc/current/contributing/code/bc.html