Skip to content

Instantly share code, notes, and snippets.

@halorgium
Last active December 16, 2015 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save halorgium/c770d3cf27f6279e5e43 to your computer and use it in GitHub Desktop.
Save halorgium/c770d3cf27f6279e5e43 to your computer and use it in GitHub Desktop.
After adding Fiber#backtrace to rbx, we can see what each Fiber is doing!!

1 second has elapsed.

  • The Actor thread is delivering the SyncCall message to the Task.
  • The sleeping Task will be resumed in 2 seconds.
  • The running Task (which is blocking using Kernel.sleep) will return in 1 second.
Celluloid::Actor 0x7400: Waiter
State: Running (executing tasks)
gems/celluloid/lib/celluloid/tasks/task_fiber.rb:19:in `deliver'
gems/celluloid/lib/celluloid/tasks.rb:69:in `resume'
gems/celluloid/lib/celluloid/actor.rb:0:in `task'
gems/celluloid/lib/celluloid/actor.rb:317:in `handle_message'
gems/celluloid/lib/celluloid/actor.rb:174:in `run'
gems/celluloid/lib/celluloid/actor.rb:157:in `initialize'
gems/celluloid/lib/celluloid/thread_handle.rb:12:in `initialize'
gems/celluloid/lib/celluloid/internal_pool.rb:63:in `create'
Tasks:
1) Celluloid::TaskFiber: sleeping
gems/celluloid/lib/celluloid/tasks/task_fiber.rb:14:in `signal'
gems/celluloid/lib/celluloid/tasks.rb:59:in `suspend'
gems/celluloid/lib/celluloid/tasks.rb:19:in `suspend'
gems/celluloid/lib/celluloid.rb:60:in `suspend'
gems/celluloid/lib/celluloid/actor.rb:308:in `sleep'
gems/celluloid/lib/celluloid.rb:443:in `sleep'
(pry):1:in `wait'
gems/celluloid/lib/celluloid/calls.rb:25:in `dispatch'
gems/celluloid/lib/celluloid/calls.rb:125:in `dispatch'
gems/celluloid/lib/celluloid/actor.rb:326:in `handle_message'
gems/celluloid/lib/celluloid/tasks.rb:42:in `initialize'
gems/celluloid/lib/celluloid/tasks/task_fiber.rb:9:in `create'
2) Celluloid::TaskFiber: running
(pry):1:in `block'
gems/celluloid/lib/celluloid/calls.rb:25:in `dispatch'
gems/celluloid/lib/celluloid/calls.rb:125:in `dispatch'
gems/celluloid/lib/celluloid/actor.rb:326:in `handle_message'
gems/celluloid/lib/celluloid/tasks.rb:42:in `initialize'
gems/celluloid/lib/celluloid/tasks/task_fiber.rb:9:in `create'
Fiber 0x73f8:
gems/celluloid/lib/celluloid/stack_dump.rb:53:in `snapshot_thread'
gems/celluloid/lib/celluloid/stack_dump.rb:30:in `snapshot'
gems/celluloid/lib/celluloid/stack_dump.rb:26:in `snapshot'
gems/celluloid/lib/celluloid/stack_dump.rb:22:in `initialize'
gems/celluloid/lib/celluloid.rb:47:in `dump'
(pry):1:in `__pry__'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:328:in `evaluate_ruby'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:278:in `re'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:254:in `rep'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:234:in `repl'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:232:in `repl'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:231:in `repl'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_instance.rb:230:in `repl'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/pry_class.rb:170:in `start'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/cli.rb:201:in `__script__'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/cli.rb:70:in `parse_options'
rbx/gems/1.9/gems/pry-0.9.12/lib/pry/cli.rb:70:in `parse_options'
rbx/gems/1.9/gems/pry-0.9.12/bin/pry:16:in `__script__'
rbx/gems/1.9/bin/pry:23:in `__script__'
Fiber 0x73fc:
rbx/lib/19/timeout.rb:90:in `watch_channel'
rbx/lib/19/timeout.rb:125:in `Timeout'
class Waiter
include Celluloid
def wait
sleep 3
end
def block
Kernel.sleep(2)
end
end
w = Waiter.new
w.async.wait
w.async.block
sleep 1
Celluloid.dump
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment