Module: Kanrisuru::ProcessorCount
- Defined in:
- lib/kanrisuru/processor_count.rb
Overview
Class Method Summary collapse
-
.physical_processor_count ⇒ Object
Number of physical processor cores on the current system.
-
.processor_count ⇒ Object
Number of processors seen by the OS, used for process scheduling.
Class Method Details
.physical_processor_count ⇒ Object
Number of physical processor cores on the current system.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/kanrisuru/processor_count.rb', line 13 def self.physical_processor_count @physical_processor_count ||= begin ppc = case RbConfig::CONFIG["target_os"] when /darwin[12]/ IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i when /linux/ cores = {} # unique physical ID / core ID combinations phy = 0 IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln| if ln.start_with?("physical") phy = ln[/\d+/] elsif ln.start_with?("core") cid = "#{phy}:#{ln[/\d+/]}" cores[cid] = true unless cores[cid] end end cores.count when /mswin|mingw/ require 'win32ole' result_set = WIN32OLE.connect("winmgmts://").ExecQuery( "select NumberOfCores from Win32_Processor" ) result_set.to_enum.collect(&:NumberOfCores).reduce(:+) else processor_count end # fall back to logical count if physical info is invalid ppc > 0 ? ppc : processor_count end end |
.processor_count ⇒ Object
Number of processors seen by the OS, used for process scheduling
8 9 10 |
# File 'lib/kanrisuru/processor_count.rb', line 8 def self.processor_count @processor_count ||= Integer(ENV['PARALLEL_PROCESSOR_COUNT'] || Etc.nprocessors) end |