class
Fiber::ExecutionContext::Isolated
Overview
Isolated execution context. Runs a single thread with a single fiber.
Concurrency is disabled within the thread: the fiber owns the thread and the thread can only run this fiber. Keep in mind that the fiber will still run in parallel to other fibers running in other execution contexts.
The fiber can still spawn fibers into other execution contexts. Since it can
be inconvenient to pass an execution context around, calls to ::spawn
will
spawn a fiber into the specified spawn_context that defaults to the
default execution context.
Isolated fibers can normally communicate with other fibers running in other
execution contexts using Channel(T)
, WaitGroup
or Mutex
for example.
They can also execute IO operations or sleep just like any other fiber.
Calls that result in waiting (e.g. sleep, or socket read/write) will block the thread since there are no other fibers to switch to. This in turn allows to call anything that would block the thread without blocking any other fiber.
You can for example use an isolated fiber to run a blocking GUI loop,
transparently forward ::spawn
to the default context, and eventually only
block the current fiber while waiting for the GUI application to quit:
gtk = Fiber::ExecutionContext::Isolated.new("Gtk") do
Gtk.main
end
gtk.wait
Included Modules
- Fiber::ExecutionContext
- Fiber::ExecutionContext::Scheduler
Defined in:
fiber/execution_context/isolated.crConstructors
-
.new(name : String, spawn_context : ExecutionContext = ExecutionContext.default, &func : -> )
Starts a new thread named name to execute func.
Instance Method Summary
-
#inspect(io : IO) : Nil
Appends a String representation of this object which includes its class name, its object address and the values of all instance variables.
- #name : String
- #running? : Bool
-
#spawn(*, name : String | Nil = nil, &block : -> ) : Fiber
Instantiates a fiber and enqueues it into the scheduler's local queue.
-
#status : String
Returns the current status of the scheduler.
-
#to_s(io : IO) : Nil
Appends a short String representation of this object which includes its class name and its object address.
-
#wait : Nil
Blocks the calling fiber until the isolated context fiber terminates.
Instance methods inherited from module Fiber::ExecutionContext::Scheduler
spawn(*, name : String | Nil = nil, &block : -> ) : Fiberspawn(*, name : String | Nil = nil, same_thread : Bool, &) : Fiber spawn, status : String status
Constructor methods inherited from module Fiber::ExecutionContext::Scheduler
current : Scheduler
current
Instance methods inherited from module Fiber::ExecutionContext
spawn(*, name : String | Nil = nil, &block : -> ) : Fiber
spawn
Constructor methods inherited from module Fiber::ExecutionContext
current : ExecutionContext
current,
default : ExecutionContext
default
Class methods inherited from module Fiber::ExecutionContext
default_workers_count : Int32
default_workers_count,
each(&) : Nil
each
Instance methods inherited from class Reference
==(other : self)==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, initialize initialize, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s
Constructor methods inherited from class Reference
new
new,
unsafe_construct(address : Pointer, *args, **opts) : self
unsafe_construct
Class methods inherited from class Reference
pre_initialize(address : Pointer)
pre_initialize
Instance methods inherited from class Object
! : Bool
!,
!=(other)
!=,
!~(other)
!~,
==(other)
==,
===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io, root : String)from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml
Macros inherited from class Object
class_getter(*names, &block)
class_getter,
class_getter!(*names)
class_getter!,
class_getter?(*names, &block)
class_getter?,
class_property(*names, &block)
class_property,
class_property!(*names)
class_property!,
class_property?(*names, &block)
class_property?,
class_setter(*names)
class_setter,
def_clone
def_clone,
def_equals(*fields)
def_equals,
def_equals_and_hash(*fields)
def_equals_and_hash,
def_hash(*fields)
def_hash,
delegate(*methods, to object)
delegate,
forward_missing_to(delegate)
forward_missing_to,
getter(*names, &block)
getter,
getter!(*names)
getter!,
getter?(*names, &block)
getter?,
property(*names, &block)
property,
property!(*names)
property!,
property?(*names, &block)
property?,
setter(*names)
setter
Constructor Detail
Starts a new thread named name to execute func. Once func returns the thread will terminate.
Instance Method Detail
Appends a String representation of this object which includes its class name, its object address and the values of all instance variables.
class Person
def initialize(@name : String, @age : Int32)
end
end
Person.new("John", 32).inspect # => #<Person:0x10fd31f20 @name="John", @age=32>
Instantiates a fiber and enqueues it into the scheduler's local queue.
Returns the current status of the scheduler. For example "running"
,
"event-loop"
or "parked"
.
Appends a short String representation of this object which includes its class name and its object address.
class Person
def initialize(@name : String, @age : Int32)
end
end
Person.new("John", 32).to_s # => #<Person:0x10a199f20>
Blocks the calling fiber until the isolated context fiber terminates. Returns immediately if the isolated fiber has already terminated. Re-raises unhandled exceptions raised by the fiber.
For example:
ctx = Fiber::ExecutionContext::Isolated.new("test") do
raise "fail"
end
ctx.wait # => re-raises "fail"