Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

[Python]Pythonサーバーメモその2

なんか色々勘違いしてた

  1. Pythonのthreadモジュールはpre-emptive
  2. 実際にはGILがあるので100バイトコードごとの協調スレッドのようにふるまう
  3. でもPy_BEGIN_ALLOW_THREADS で実行権は譲れる(その間は通常のpre-emptiveなスレッド)
  4. I/O待ちの直前でPy_BEGIN_ALLOW_THREADSを使って実行権を譲れば無駄な待ちを減らせる(というか定番の書き方)
  5. Cの部分でうまい具合になってれば今のままでもいい気がする。Cでの実装依存
  6. Cの実装依存が不透明な気もする。その場合twisted、eventletで。

その他

  1. libevent、libevに対応したpython binding、pyevent、pyevがある。(両方共googlecode)
  2. eventletは両方サポートしている
  3. greenletのコア部であるstackの保存に関する部はアセンブラで書かれている。

eventlet同様、cooperative threadsを採用しているOcsigen(ocaml)のI/Oはどうなってるのかな???