[ANN] Revactor 0.1.5: Erlangy add-ons to Ruby 1.9

Discussion in 'Ruby' started by Tony Arcieri, Oct 27, 2009.

  1. Tony Arcieri

    Tony Arcieri Guest

    [Note: parts of this message were removed to make it a legal post.]

    *"The reports of my death are greatly exaggerated"*

    Revactor implements an approach to concurrency known as the Actor model.
    Actors are lightweight concurrency primitives which talk to each other using
    messages.

    While it can't provide you the full benefits of Erlang's immutable state and
    excellent performance, Revactor can provide an easier way of modeling
    complex I/O problems in Ruby that might be difficult to think about when
    forced into the inversion of control model used by standard asynchronous
    event frameworks, such as EventMachine or Rev.

    Revactor uses the Ruby 1.9 Fibers mechanism to provide (relatively) high
    performance userspace concurrency for I/O bound tasks. This makes it useful
    for a number of tasks which are presently somewhat difficult to do in Ruby,
    such as web spidering and asynchronous web frameworks.

    Revactor's actor API is loosely shared with two other Ruby projects: the
    Rubinius virtual machine's actor library (http://rubini.us/) and the Omnibus
    Concurrency Library (http://rubyforge.org/projects/concurrent/), both
    authored by MenTaLguY. The syntax of these implementations and Revactor are
    mostly equivalent, however semantics of these three APIs are only loosely
    similar and some work will be involved in porting code between them.

    --

    Revactor 0.1.5 is a maintenance release to provide compatibility with Rev
    0.3.x, a library it uses for event monitoring. However, it also includes a
    new feature:

    Revactor::HttpFetcher provides a concurrent HTTP fetcher library useful for
    tasks like web spidering, or pretty much any situation where you need to
    fetch a lot of documents over HTTP and might discover new URLs along the
    way. This fetcher uses a scatter/gather approach to spreading a fetch queue
    among as many fibers as you wish, and allows you to continuously add URLs to
    the fetch queue as they enter the system. You can view the
    implementation/unprocessed RDoc here:

    http://github.com/tarcieri/revactor/blob/master/lib/revactor/http_fetcher.rb

    In production, a single process on a 2.0GHz machine was able to pull down
    around 10Mbps worth of documents. YMMV, but I would be interested to hear
    how it performs for other people.

    Also, check out Rainbows, which uses Revactor and adds async support to the
    Unicorn HTTP server, and provides something like the Python Tornado HTTP
    server (http://www.tornadoweb.org/) in Ruby:

    http://rainbows.rubyforge.org/

    --

    Revactor Philosophy: http://revactor.org/philosophy
    Github: http://github.com/tarcieri/revactor
    Gemcutter: http://gemcutter.org/gems/revactor
    Rubyforge: http://rubyforge.org/projects/revactor/
     
    Tony Arcieri, Oct 27, 2009
    #1
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.