Paradigms of Concurrency
Why is this important?
Or for geeks to relate...
Without right abstractions...
So what do we have in hand? ● Threads – The Java hangover ● Fibers – Red headed cousin of threads ● Actors – Stylish but effective ● Reactor – He will do all the work... ● Dataflow – The forgotten one.. ● STM – Remember ATM ● The Nirvana
A folk definition of insanity is to do the same thing over and over again and to expect the results to be different. By this definition, we in fact require that programmers of multithreaded systems be insane - The Problem with Threads Edward Lee
Threading in Ruby Concurrency is a myth Ruby - @igvita
Fibers ● New kid in the block from Ruby 1.9 ● Green threads with cooperatively scheduler ● Can give up CPU control to other fiber when needed. ● Based on Coroutines – Like python generators but can yield to other coroutines ● Think NeverBlock...
Nginx vs Apache Death Match
EventMachine – Reactor Pattern
EventMachine ● Based on python Twisted ● Reactor sits in the middle ● IOC pattern – Not many get used to it ● Defer long running process ● Support for lot of protocols and very active development ● Try my em-couchdb :) (http://github.com/saivenkat/em- couchdb)
Actors -Stylishly passing messages
Actors ● Message passing concurrency ● No first class support in Ruby ● Revactor is good but we had problems with it ● If Jruby, lots of Java Actor framework available like Jetlang. ● Jruby + Jetlang - http://bit.ly/ahXh6j
Transactions – We are safe
Software Transactional Memory ● Similar to database transactions but inmemory (ACIDXX) ● Unfortunately again no first class support ● STM library by MentalGuy - http://bit.ly/c7Mxah ● In Jruby harness clojure's infrastructure – Ruby objects as refs. http://bit.ly/d6vpuP
Multi Process
Coordination
Coordination ● How do we coordinate independent units of execution? ● Dataflow – Forgotten paradigm ● Other methods – May be a big heavy weight suitable when multi processing ● Tuplespace, Queues (RabbitMq or beanstalk)
Nirvana
Nirvana ● Polyglotism – Let the languages which excel in concurrency do the job ● Make Ruby talk with Clojure, Erlang, Haskell, node.js... ● Lots of ways. VM level support, external infrastructure.
Sai Venkat github.com/saivenkat @sai_venkat http://developer-in-test.blogspot.com HariKrishnan github.com/harikrishnan83 @harikrishnan83 http://harikrishnan83.wordpress.com
All images used are attributed to the awesome guys who took them.. Please don't sue us :D
Concurrency patterns in Ruby

Concurrency patterns in Ruby

  • 1.
  • 2.
    Why is thisimportant?
  • 3.
    Or for geeksto relate...
  • 5.
  • 6.
    So what dowe have in hand? ● Threads – The Java hangover ● Fibers – Red headed cousin of threads ● Actors – Stylish but effective ● Reactor – He will do all the work... ● Dataflow – The forgotten one.. ● STM – Remember ATM ● The Nirvana
  • 7.
    A folk definitionof insanity is to do the same thing over and over again and to expect the results to be different. By this definition, we in fact require that programmers of multithreaded systems be insane - The Problem with Threads Edward Lee
  • 8.
    Threading in Ruby Concurrencyis a myth Ruby - @igvita
  • 10.
    Fibers ● New kid in the block from Ruby 1.9 ● Green threads with cooperatively scheduler ● Can give up CPU control to other fiber when needed. ● Based on Coroutines – Like python generators but can yield to other coroutines ● Think NeverBlock...
  • 11.
    Nginx vs ApacheDeath Match
  • 12.
  • 13.
    EventMachine ● Based on python Twisted ● Reactor sits in the middle ● IOC pattern – Not many get used to it ● Defer long running process ● Support for lot of protocols and very active development ● Try my em-couchdb :) (http://github.com/saivenkat/em- couchdb)
  • 14.
  • 15.
    Actors ● Message passing concurrency ● No first class support in Ruby ● Revactor is good but we had problems with it ● If Jruby, lots of Java Actor framework available like Jetlang. ● Jruby + Jetlang - http://bit.ly/ahXh6j
  • 16.
  • 17.
    Software Transactional Memory ● Similar to database transactions but inmemory (ACIDXX) ● Unfortunately again no first class support ● STM library by MentalGuy - http://bit.ly/c7Mxah ● In Jruby harness clojure's infrastructure – Ruby objects as refs. http://bit.ly/d6vpuP
  • 18.
  • 19.
  • 20.
    Coordination ● How do we coordinate independent units of execution? ● Dataflow – Forgotten paradigm ● Other methods – May be a big heavy weight suitable when multi processing ● Tuplespace, Queues (RabbitMq or beanstalk)
  • 21.
  • 22.
    Nirvana ● Polyglotism – Let the languages which excel in concurrency do the job ● Make Ruby talk with Clojure, Erlang, Haskell, node.js... ● Lots of ways. VM level support, external infrastructure.
  • 23.
    Sai Venkat github.com/saivenkat @sai_venkat http://developer-in-test.blogspot.com HariKrishnan github.com/harikrishnan83 @harikrishnan83 http://harikrishnan83.wordpress.com
  • 24.
    All images usedare attributed to the awesome guys who took them.. Please don't sue us :D