こんにちは、なかむら(う)です。
In message "[ruby-dev:45300] Re: GVL改善案"
on Mar.01,2012 06:35:56, <kosaki.motohiro / gmail.com> wrote:
> usaさんとIRCでちょっと議論したんですが、片方がbusy loop で片方が
> Thread.passで紳士的に振る舞った場合、まっとうなインプリである限りどう実装してもbusy loopが暴れるんじゃないですかね。
>
> time sliceを短くすれば現象が見えにくくなるけどそれが解なのかなあ
>
>
> 残念なことにtkのコードってたまにThread.passで譲るけど、イベントない時でもbusy
> loopしつづけるようなので、tkのイベントスレッドにCPUを優先的に割り当てるボーナスを実装すると、こんどはバックグラウンド処理のほうがまったく動かなくなりそう
付け加えると、
(1) イベントループはGVL外して回し、イベントに対応するrubyコ
ードを実行するときに改めてGVLを取得すべきではないか。
(2) (1)でのGVL取得で最悪300ms待たされると結局同じことなので、
何らかの形で優先的にGVLを取得できるようなAPIがあるとい
いのではないか。
というアイデアは出ていました。
(2)については、スレッドのpriorityと同じ意味の値を引数に取るよ
うなAPIにして、今動いてるスレッドのpriorityより引数のpriority
の方が高い場合はGVL奪っちゃう、というのでどうだろう、と私は勝
手に考えています。
それでは。
--
U.Nakamura <usa / garbagecollect.jp>