module Celluloid::Internals::CPUCounter

Public Class Methods

cores() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 5
def cores
  @cores ||= count_cores
end

Private Class Methods

count_cores() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 11
def count_cores
  from_result(from_env || from_sysdev || from_java || from_proc || from_win32ole || from_sysctl) || 1
end
from_env() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 15
def from_env
  result = ENV["NUMBER_OF_PROCESSORS"]
  result if result && !result.empty?
rescue
end
from_java() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 32
def from_java
  Java::Java.lang.Runtime.getRuntime.availableProcessors if defined? Java::Java
rescue
end
from_proc() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 37
def from_proc
  File.read("/proc/cpuinfo").scan(/^processor\s*:/).size if File.exist?("/proc/cpuinfo")
rescue
end
from_result(result) click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 54
def from_result(result)
  if result
    i = Integer(result.to_s[/\d+/], 10)
    return i if i > 0
  end
rescue
end
from_sysctl() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 49
def from_sysctl
  Integer %x`sysctl -n hw.ncpu 2>/dev/null`
rescue
end
from_sysdev() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 21
def from_sysdev
  ::IO.read("/sys/devices/system/cpu/present").split("-").last.to_i + 1
rescue Errno::ENOENT
  begin
    result = Dir["/sys/devices/system/cpu/cpu*"].count { |n| n =~ /cpu\d+/ }
    result unless result.zero?
  rescue
  end
rescue
end
from_win32ole() click to toggle source
# File lib/celluloid/internals/cpu_counter.rb, line 42
def from_win32ole
  require "win32ole"
  WIN32OLE.connect("winmgmts://").ExecQuery("select * from Win32_ComputerSystem").NumberOfProcessors
rescue LoadError
rescue
end