NOTE: Actress
gem was merged into concurrent-ruby. It’s no longer maintained.
Actress
¶ ↑
Actor model library.
Provides Future and Actors. Actors are sharing Thread pool so as many actors as needed can be spawned allowing to better structure your code without caring about number of threads or recycling of actors. Architecture inspired by Erlang and Akka. (AFAIK This is not possible with any other gem providing Actor model.)
Quick peak¶ ↑
require 'actress' Message = Algebrick.type do variants Plus = type { fields a: Numeric, b: Numeric }, Subtract = type { fields a: Numeric, b: Numeric } end class Counter < Actress::Abstract def on_message(message) Type! message, Message match message, (on ~Plus do |(a, b)| a + b end), (on Subtract.(~any, ~any) do |a, b| a - b end) end end world = Actress::World.new counter = world.spawn Counter, 'counter' operations = [Plus[1, 2], Subtract[2, 1]] results = operations.map { |o| counter.ask o } # futures p results.map(&:value) # => [3,1] world.terminate
Note¶ ↑
This is still only version 0.0.x please keep that in mind when something breaks ;)