Sha256: 9c9d9e97dc7f89b1ff08f79e5f56a947d16a318071fc0815296aae3b4dba5594

Contents?: true

Size: 1.46 KB

Versions: 42

Compression:

Stored size: 1.46 KB

Contents

require 'etc'

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
      @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 /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
  end
end

Version data entries

42 entries across 38 versions & 13 rubygems

Version Path
plaid-14.13.0 vendor/bundle/ruby/3.0.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
plaid-14.12.1 vendor/bundle/ruby/3.0.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
plaid-14.12.0 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
plaid-14.11.1 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
plaid-14.10.0 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
plaid-14.7.0 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
ory-kratos-client-0.7.6.alpha1 vendor/bundle/ruby/2.5.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
ory-kratos-client-0.7.5.alpha2 vendor/bundle/ruby/2.5.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
mx-platform-ruby-0.4.0 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
mx-platform-ruby-0.3.2 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
mx-platform-ruby-0.3.1 vendor/bundle/ruby/2.6.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
rails_mini_profiler-0.2.0 vendor/bundle/ruby/3.0.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
brakeman-5.1.1 bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
brakeman-5.1.0 bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
passbase-1.3.0 vendor/bundle/ruby/2.7.0/gems/parallel-1.19.2/lib/parallel/processor_count.rb
brakeman-5.0.2 bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
cocRb-0.1.0 .bundle/ruby/3.0.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
mfk_openapi_ruby_client-1.0.0 vendor/bundle/ruby/2.7.0/gems/parallel-1.20.1/lib/parallel/processor_count.rb
passbase-1.2.0 vendor/bundle/ruby/2.7.0/gems/parallel-1.19.2/lib/parallel/processor_count.rb
parallel-1.20.1 lib/parallel/processor_count.rb