class Concurrent::Utility::ProcessorCounter
@!visibility private
Public Class Methods
new()
click to toggle source
# File lib/concurrent-ruby/concurrent/utility/processor_counter.rb, line 11 def initialize @processor_count = Delay.new { compute_processor_count } @physical_processor_count = Delay.new { compute_physical_processor_count } end
Public Instance Methods
physical_processor_count()
click to toggle source
# File lib/concurrent-ruby/concurrent/utility/processor_counter.rb, line 20 def physical_processor_count @physical_processor_count.value end
processor_count()
click to toggle source
# File lib/concurrent-ruby/concurrent/utility/processor_counter.rb, line 16 def processor_count @processor_count.value end
Private Instance Methods
compute_physical_processor_count()
click to toggle source
# File lib/concurrent-ruby/concurrent/utility/processor_counter.rb, line 34 def compute_physical_processor_count ppc = case RbConfig::CONFIG["target_os"] when /darwin\d\d/ 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 if not 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 rescue return 1 end
compute_processor_count()
click to toggle source
# File lib/concurrent-ruby/concurrent/utility/processor_counter.rb, line 26 def compute_processor_count if Concurrent.on_jruby? java.lang.Runtime.getRuntime.availableProcessors else Etc.nprocessors end end