トップ «前の日記(2010-07-20) 最新 次の日記(2010-08-06)» 編集

Route 477



2010-07-29

[ruby] FiberをRuby 1.8にバックポートするfiber18

Ruby 1.9のFiberを、1.8のThreadを使って実装したものらしい。

1.9のThreadはネイティブスレッドだけど、1.8のThreadはグリーンスレッド(自前実装)なので、実は1.9のFiberとよく似てるのである。

違いと言えば、Threadは勝手に切り替わるけど、Fiberは明示的にFiber.yieldを呼ばないと切り替わらない。後者で前者を実装することはできないが、逆は可能であると。

ソースはこちら:

threadライブラリQueueクラスを使っているようだ。 Queueは、ただのキューではなく、空のときにpopしようとするとブロックする。

参考