Ниже мои заметки (именно заметки, без претензии на пост) по тематике обозначенной выше - тезисно.
Похоже все согласны с тем что хорошие примеры concurency done right - это продукты вроде Erlang и Scala.
Версии Ruby и поддержка concurrency:
Похоже все согласны с тем что хорошие примеры concurency done right - это продукты вроде Erlang и Scala.
Версии Ruby и поддержка concurrency:
- JRuby 1.6+ (true concurrency via JVM)
- Ruby MRI 1.9.3 (native threads, GIL, примитивы - Thread, Fiber, Actor, GIL из-за This decision maybe makes us happy because we can run most of the extensions written in C without any modifications - т.е. видимо эти C-extensions are not thread safe. Обещали Multi-VM в YARV для победы над GIL)
- Rubinius 2.0+ (true concurrency, no GIL, fine grained locks, примитивы - те же что и у MRI 1.9.3)
Concurrency models:
- Thread - тут все более менее понятно
- Fiber - cooperative scheduling, если один фибер закончил работу передает управление следующему
- 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)
- Proactor pattern - что-то похожее есть в https://github.com/methodmissing/eio но чистой реализации не встречал. keep in mind
- 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/reel, https://github.com/celluloid/lattice). Если JRuby то можно использовать один из Java фреймворков вроде http://akka.io/. http://rubyforge.org/projects/concurrent - keep in mind
- CSP/Pi Calculus - https://github.com/igrigorik/agent
- Software transactional memory - http://moonbase.rydia.net/software/ruby-stm/ruby-stm.git/
- Dataflow - https://github.com/larrytheliquid/dataflow
Презентации
Ссылки
Ссылки
- State of Ruby VMs: Ruby Renaissance
- Concurrency with Actors, Goroutines & Ruby
- Untangling Evented Code with Ruby Fibers
- Distributed Ruby with the MagLev VM
- Fibers & Cooperative Scheduling in Ruby
- Parallelism is a Myth in Ruby
- Ruby EventMachine - The Speed Demon
- http://www.confreaks.com/
- http://www.youtube.com/user/Confreaks
Comments
Post a Comment
СООБЩЕНИЕ СПАМЕРАМ: прежде чем пытаться оставить ссылку на свой ресурс в комментарии, прошу обратить внимание на тег nofollow, которым они помечены и зря не терять ни свое ни мое время. А будете упорствовать еще и noindex поставлю