Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Celluloid & DCell

Celluloid & DCell

Patrick Van Stee

July 11, 2012
Tweet

More Decks by Patrick Van Stee

Other Decks in Programming

Transcript

  1. Celluloid
    DCell
    &

    View Slide

  2. @vanstee
    github.com/vanstee
    Patrick Van Stee
    highgroove.com

    View Slide

  3. @tarcieri
    Revactor
    Reia
    nio4r
    Cryptosphere
    cool.io

    View Slide

  4. brew install zeromq
    gem install dcell
    Setup

    View Slide

  5. Celluloid
    General purpose concurrency
    framework for Ruby built on the
    Actor Model

    View Slide

  6. class Counter
    attr_reader :count
    def initialize
    @count = 0
    end
    def increment
    @count += 1
    end
    end

    View Slide

  7. class Counter
    attr_reader :count
    def initialize
    @count = 0
    @mutex = Mutex.new
    end
    def increment
    @mutex.synchronize do
    @count += 1
    end
    end
    end

    View Slide

  8. Threads
    are
    hard!

    View Slide

  9. class Counter
    include Celluloid
    attr_reader :count
    def initialize
    @count = 0
    end
    def increment
    @count += 1
    end
    end

    View Slide

  10. Actor
    Model

    View Slide

  11. •No shared state
    •Communicate with
    messages
    •Process messages
    sequentially

    View Slide

  12. class Counter
    include Celluloid
    def increment(count, actor)
    return count if count < 10000
    actor.increment(
    count + 1,
    Actor.current
    )
    end
    end

    View Slide

  13. &
    Asynchronous
    Method Calls
    Futures

    View Slide

  14. counter = Counter.new
    # returns immediately
    counter.increment!
    puts counter.count
    # returns immediately
    future = counter.future :increment
    puts future.value

    View Slide

  15. module Enumerable
    def map(&block)
    futures = map do |item|
    Celluloid::Future.new(
    item,
    &block
    )
    end
    futures.map(&:value)
    end
    end

    View Slide

  16. Caveats

    View Slide

  17. • The GIL in MRI does
    not allow parallelism
    • Threads and Fibers
    are expensive
    • Concurrency is still a
    hard problem
    [not really]

    View Slide

  18. DCell

    View Slide

  19. Celluloid
    General purpose concurrency
    framework for Ruby built on the
    Actor Model
    DCell
    Distributed Celluloid over 0MQ

    View Slide

  20. “I thought of objects being like
    biological cells or individual
    computers on a network, only
    able to communicate with
    messages. Alan Kay

    View Slide

  21. • Exposes Actors on the
    Network
    • Send messages as you
    normally would

    View Slide

  22. DRb DCell
    Threads Actors

    View Slide

  23. Demo

    View Slide

  24. Also
    Checkout
    Sidekiq

    View Slide

  25. github.com
    celluloid/celluloid
    celluloid/dcell

    View Slide

  26. Hack Night

    View Slide