I've been (barely, occasionally) writing an Actor system for Ruby.

It was actually pretty easy, when I was doing one thread per actor, but that 
has some serious drawbacks -- among them that threads can't be garbage 
collected (can they?), whereas actors really should be collectable.

So now I'm considering running a smaller number of threads -- at least one per 
usable CPU (so at least one on mainline Ruby, more on JRuby) -- but more, 
since operations might block.

The problem is, how do I detect a blocked thread, and execute some code when 
that happens?

The best I can think of is to poll, checking for #stop?, but that's hackish, 
and performance would be awful. Poll too often, and I burn CPU -- not often 
enough, and I end up with large windows of my app waiting for the poll thread 
to wake up.