Created
December 9, 2017 19:19
-
-
Save brandon93s/a46fb07b0dd589dc34e987c33d775679 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Source of https://www.npmjs.com/package/physical-cpu-count | |
'use strict' | |
const os = require('os') | |
const childProcess = require('child_process') | |
function exec (command) { | |
const output = childProcess.execSync(command, {encoding: 'utf8'}) | |
return output | |
} | |
let amount | |
const platform = os.platform() | |
if (platform === 'linux') { | |
const output = exec('lscpu -p | egrep -v "^#" | sort -u -t, -k 2,4 | wc -l') | |
amount = parseInt(output.trim(), 10) | |
} else if (platform === 'darwin') { | |
const output = exec('sysctl -n hw.physicalcpu_max') | |
amount = parseInt(output.trim(), 10) | |
} else if (platform === 'windows') { | |
const output = exec('WMIC CPU Get NumberOfCores') | |
amount = output.split(os.EOL) | |
.map(function parse (line) { return parseInt(line) }) | |
.filter(function numbers (value) { return !isNaN(value) }) | |
.reduce(function add (sum, number) { return sum + number }, 0) | |
} else { | |
const cores = os.cpus().filter(function (cpu, index) { | |
const hasHyperthreading = cpu.model.includes('Intel') | |
const isOdd = index % 2 === 1 | |
return !hasHyperthreading || isOdd | |
}) | |
amount = cores.length | |
} | |
module.exports = amount |
I am getting 'win32' for windows, so it falls back to the cpus(). I changed it to else if (platform === 'windows' || platform === 'win32') {
Node 18.14.0 and newer support os.availableParallelism()
which should be used instead of os.cpus().length
, this still only returns the number of logical processors, not the number of physical processors.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
That's because os.platform() returns 'win32' for windows and not 'windows' as here. Check my fork for proper solution.