Class: Emit::Scheduler

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/emit/scheduler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeScheduler

Returns a new instance of Scheduler.



18
19
20
# File 'lib/emit/scheduler.rb', line 18

def initialize
  reset!
end

Instance Attribute Details

#currentObject (readonly)

Returns the value of attribute current.



16
17
18
# File 'lib/emit/scheduler.rb', line 16

def current
  @current
end

Instance Method Details

#activate(process) ⇒ Object



50
51
52
# File 'lib/emit/scheduler.rb', line 50

def activate(process)
  @next_queue << process
end

#enqueue(process) ⇒ Object Also known as: <<



31
32
33
# File 'lib/emit/scheduler.rb', line 31

def enqueue(process)
  @new_queue << process
end

#get_nextObject



54
55
56
57
58
59
60
61
62
63
# File 'lib/emit/scheduler.rb', line 54

def get_next
  if !@new_queue.empty?
    @fiber
  elsif !@next_queue.empty?
    @current = @next_queue.shift
    @current
  else
    @fiber
  end
end

#join(processes) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/emit/scheduler.rb', line 36

def join(processes)
  tmp = @current
  @done = false

  processes.each do |process|
    until process.executed?
      raise DeadlockException if @done
      get_next.transfer
    end
  end

  @current = tmp
end

#reset!Object



22
23
24
25
26
27
28
29
# File 'lib/emit/scheduler.rb', line 22

def reset!
  @root       = MainProcess.instance
  @current    = @root
  @new_queue  = []
  @next_queue = []
  @fiber      = Fiber.new { start_mainloop }
  @done       = false
end