[Python]Pythonサーバーメモその2
なんか色々勘違いしてた
- Pythonのthreadモジュールはpre-emptive
- 実際にはGILがあるので100バイトコードごとの協調スレッドのようにふるまう
- でもPy_BEGIN_ALLOW_THREADS で実行権は譲れる(その間は通常のpre-emptiveなスレッド)
- I/O待ちの直前でPy_BEGIN_ALLOW_THREADSを使って実行権を譲れば無駄な待ちを減らせる(というか定番の書き方)
- Cの部分でうまい具合になってれば今のままでもいい気がする。Cでの実装依存か
- Cの実装依存が不透明な気もする。その場合twisted、eventletで。
その他
- libevent、libevに対応したpython binding、pyevent、pyevがある。(両方共googlecode)
- eventletは両方サポートしている
- greenletのコア部であるstackの保存に関する部はアセンブラで書かれている。
eventlet同様、cooperative threadsを採用しているOcsigen(ocaml)のI/Oはどうなってるのかな???