If a C programmer asks "do you want to see something cool?", run away.
--John Van Enk

Thursday, January 24, 2013

Ruby Concurrency Notes

Ниже мои заметки (именно заметки, без претензии на пост) по тематике обозначенной выше - тезисно.

Похоже все согласны с тем что хорошие примеры concurency done right - это продукты вроде Erlang и Scala.

Версии Ruby и поддержка concurrency:
Concurrency models:
  1. Thread - тут все более менее понятно
  2. Fiber - cooperative scheduling, если один фибер закончил работу передает управление следующему
  3. Reactor pattern - IOC, сложнее для понимания, представлен в виде библиотек http://rubyeventmachine.com/ (libevent), https://github.com/celluloid/celluloid-io (libev). У первой есть свои gotchas (например behaviour после того как в одном из потоков threadpool бросается исключение), со второй пока что не приходилось работать. Есть https://github.com/igrigorik/em-synchrony - позволяет завернуть evented код в fibers и он будет выглядеть как обычный - не evented (оставаясь при этом evented) - некоторым нравится. Есть веб фреймворки (http://cramp.in/) и веб сервера (https://github.com/celluloid/reel, Thin, Goliath)
  4. Proactor pattern - что-то похожее есть в https://github.com/methodmissing/eio но чистой реализации не встречал. keep in mind
  5. Actor pattern - есть в rubinius via https://github.com/rubinius/rubinius-actor, есть celluloid.io (https://github.com/celluloid/celluloid). Celluloid интересен тем что под своей крышей https://github.com/celluloid объединяет несколько проектов каждый из которых интереснее предыдущих (https://github.com/celluloid/dcell, https://github.com/celluloid/reelhttps://github.com/celluloid/lattice). Если JRuby то можно использовать один из Java фреймворков вроде http://akka.io/http://rubyforge.org/projects/concurrent - keep in mind
  6. CSP/Pi Calculushttps://github.com/igrigorik/agent
  7. Software transactional memoryhttp://moonbase.rydia.net/software/ruby-stm/ruby-stm.git/
  8. Dataflowhttps://github.com/larrytheliquid/dataflow
Видео