Celluloid/celluloid-io/celluloid-zmq 0.10.0: Actor-based concurrent objects (with evented I/O and 0M

Now with a snazzy new web site!

Celluloid provides a concurrent object oriented programming framework
for
Ruby which lets you build multithreaded programs out of concurrent
objects
just as easily as you build sequential programs out of regular objects

You may remember Celluloid from such projects as Sidekiq, a nifty
multithreaded background worker system which acts as a drop-in
replacement
for Resque.

A distributed extension to Celluloid is also available, however as there
are a few more features I want to get into its release, I am not
shipping
DCell 0.10.0 yet. But please check it out anyway!

Celluloid::IO is probably the star of this release. While previous
releases
shipped a half-baked client API that used blocking connects and blocking
DNS resolution, this is no longer the case. The client API is now fully
nonblocking, including DNS resolution, which effectively makes
Celluloid::IO feature complete as a nonblocking I/O system:

Celluloid::IO 0.10.0 also fixes a bug where data would get
interleaved/corrupted when multiple tasks were doing writes to the same
socket simultaneously. Several tasks can now write to the same socket,
and
each write operation is now “atomic”.

Celluloid 0.10.0 includes some unannounced features which were silently
shipped in 0.9.1. Below is the combined 0.10.0+0.9.1 change history:

  • Celluloid::Actor.current is now the de facto way to obtain the current
    actor
  • #terminate now uses system messages, making termination take priority
    over
    other pending methods
  • #terminate! provides asynchronous termination
  • Recurring timers with Celluloid#every(n) { … }
  • Obtain UUIDs with Celluloid.uuid (fastest thread-safe Ruby UUID
    generator
    evar?)
  • Obtain the number of CPU cores available with Celluloid.cores
  • Celluloid::Pool defaults to one actor per CPU core max by default

Celluloid::ZMQ has now been spun off as a separate git
repository/project
(previously it was a part of DCell):

Enjoy!