しつこくLuaを触ってみる

Luaのスレッド(coroutine)を使ってオブジェクトを制御してみる。このcoroutine、まさにゲームにうってつけの超便利な機能。coroutineがいったいどんなもので、どんな風に便利なのかは下記URLを参考に。

要するに協調型のスレッドなんだけど、複雑になりがちな状態偏移を繰り返すオブジェクトの処理をすっきりと記述することが出来る。

  • 気になること
    • 新規に作成したスレッドは親のlua_Stateと同じグローバル空間を共有する。
    • suspend中のスレッドから他の関数を呼ぼうとすると落ちる。
    • 実行中のスレッドを強制的に中断させる方法がわからない。死亡フラグを持たせておいて、スレッド内でチェックして、自立的に関数から抜ける、みたいにすれば良いのだろうか。

スレッドやテーブルの作成はメモリの再確保が行われたり、結構重い処理のよう。とくにテーブルはメンバを追加したりサイズが増えたりするたびにメモリの再確保を行うため、なるべくパフォーマンスを要求される所には使わないほうがよさそう。

スレッドは最初にどかっと作り貯めておいて、要求に応じてプールから割り当てる形にしたほうが良さそうだ。