スレッド

最近、audaciousメタデータキャナスレッドをg_cond_wait()とg_cond_signal()を使って書き直しました。
今まではg_usleep()を使った間歇実行だったのが、完全にイベントドリブンになりました。
言うなればポーリングから割り込み駆動になったようなものです。
時間あたりの平均CPU利用率は下がり、応答性は向上したと思うのですが、トリガーになるキー入力やマウス操作などを連続的に行なうと、そこではCPU負荷は高くなる傾向があります。
この辺は昨今のgigabit etherドライバなどと同じ現象ですね。
これらのドライバでは割り込み頻度を一定以下に制限する機能が実装されていたりしますが、今回のようなスレッドで同様のことができるのかはまだ分かりません。それからcond_waitしていないところで発行されたシグナルがどう扱われるのかなども興味深いところです。