lib/parallel/processor_count.rb
def physical_processor_count
      @physical_processor_count ||= begin
        ppc = case RbConfig::CONFIG["target_os"]
        when /darwin1/
          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
      end
    end
def physical_processor_count
      @physical_processor_count ||= begin
        ppc = case RbConfig::CONFIG["target_os"]
        when /darwin1/
          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
      end
    end
def physical_processor_count @physical_processor_count ||= begin ppc = case RbConfig :: CONFIG [ "target_os" ] when / / IO . popen ( "/usr/sbin/sysctl -n hw.physicalcpu" ) . read . to_i when / / cores = { } # unique physical ID / core ID combinations phy = 0 IO . read ( "/proc/cpuinfo" ) . scan ( / / ) 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 / / 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
Number of physical processor cores on the current system.
Number of physical processor cores on the current system .