stackless pythonのお話
比較
stackless python
greenlet
- 処理系自身には手を入れていない
- Cのstackをコピーすることで継続を行う。(greenletを使用している箇所のみ)
- スケジューラーがデフォルトでない。(親に戻るってところはデフォルトで入る)
stacklessの気になるところ
stacklessは評価毎にcstackを保存しまくるため、通常の処理自体遅くなる。
(1割程度)
stacklessは自前で保存しているcstack objectを見に行くので再起でCスタックを消費しない。
(これが有用になるケースはそんなにない気がする)
taskletのスケジューリングを自前でやりたい時の情報が少ない。
(channelベースが多い。insertとかで実はできるんだけどね)
コスト
生成コストはプールするとかでなんとかなったりするのであんまり気にしてない。
切り替えコストはどっちが速いのだろう???
- greenletは切り替わるたびCのstackをheapに突っ込む。そしてそこを参照してコピー、リストア
- stacklessは保持しているcstack objectからコピー、リストア
一応greenletはCのスタックを突っ込む時に拡張したメモリをrestoreの際に開放しているけど、
stacklessはcstackをどうしてるんだっけ?
トータルで見るとどっちもどっちな気がするなあ。
ただ通常実行速度の低下を考えるとgreenetでいい気がしてきたなあ。
stackless pythonをわざわざビルドしてまで使う有用性が見えないんだけど誰か教えて下さい。