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
Ruby which lets you build multithreaded programs out of concurrent
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
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
DCell 0.10.0 yet. But please check it out anyway!

Celluloid::IO is probably the star of this release. While previous
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,
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
  • #terminate now uses system messages, making termination take priority
    other pending methods
  • #terminate! provides asynchronous termination
  • Recurring timers with Celluloid#every(n) { … }
  • Obtain UUIDs with Celluloid.uuid (fastest thread-safe Ruby UUID
  • 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
(previously it was a part of DCell):