Sha256: 35c65261d7b85158133da6b424fbadf05cd22e8487070845bad7fa22e5780fe2

Contents?: true

Size: 1.56 KB

Versions: 2662

Compression:

Stored size: 1.56 KB

Contents

# frozen_string_literal: true
module Parallel
  # TODO: inline this method into parallel.rb and kill physical_processor_count in next major release
  module ProcessorCount
    # Number of processors seen by the OS, used for process scheduling
    def processor_count
      require 'etc'
      @processor_count ||= Integer(ENV['PARALLEL_PROCESSOR_COUNT'] || Etc.nprocessors)
    end

    # Number of physical processor cores on the current system.
    def 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
            File.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
  end
end

Version data entries

2,662 entries across 2,662 versions & 17 rubygems

Version Path
ory-client-0.0.1.alpha147 vendor/bundle/ruby/2.5.0/gems/parallel-1.22.1/lib/parallel/processor_count.rb
parallel-1.22.1 lib/parallel/processor_count.rb