その8

マルチスレッディング part2

内部では単一スレッドにしようと考えてますがスレッドの制御が面倒です。
スレッドには忙しい状態と暇な状態があります。


忙しい時はCPUを独り占めして働き続けます。
60fps、30fpsでフレーム管理されてまして、暇なときはsleepで眠ってます。


忙しい状態

while(true) {
    ...
}


暇な状態

while(true) {
    sleep       // 自動的に60fpsに調整される
}

二つのコードを同時に実行した場合どうなるでしょうか。
片方は忙しく働いてるままではもう片方が全く実行されなくなるので、何回かずつでタスクを交替します。
暇な状態は60fpsを保たなければなりません。しかし忙しい状態を保つ為にsleepはできません。
ということでスレッドごとにタイマを保持し(スレッド的にsleep)、全てのスレッドがsuspend状態になった時のみにsleepするようにします。


オラ カーネル部分作ってる気分*1になってきたぞ!


でもこれ、スレッドを増やすごとにCPUの負担が大きくなります。
なのでネイティブコードででも実装できるように、スレッドとプラグインという二つの方法を追加しようと思います。

*1:シングルスレッド上でマルチタスク管理なとこ