oza_OoO先生によるマルチスレッド講座 その1

Ruby 1.9での可視性について
2
SKS rep @repeatedly

そういや,Rubyの場合値の可視性ってどうなってるんだろ?と思ったけど,内部ではpthread使ってるとして,そっちがよしなにやってくれるのかな?

2010-04-14 00:43:04
SKS rep @repeatedly

@syonbori Rubyの場合,スレッドで値を書き換えるとして,その書き換えた結果って他のスレッドに即座に反映されるのん?

2010-04-14 00:44:26
SKS rep @repeatedly

あ,さっきのは1.9の話.1.8はグリーンスレッドだから,そもそも可視性云々はない.

2010-04-14 00:45:35
oza @oza_x86

@repeatedly Ruby のスレッドは同時に 1つしか動かないから大丈夫なんじゃない.

2010-04-14 00:46:10
SKS rep @repeatedly

@oza_x86 1.9は違うんでない?1.9もGVLの影響でそうなるのかいな.

2010-04-14 00:48:15
oza @oza_x86

@repeatedly そう. 実行はシリアライズされる(並行に動くが並列に動かない).

2010-04-14 00:49:24
oza @oza_x86

@repeatedly メモリバリアが効いてくるのは OoO 実行のときだけど、ロックすると

2010-04-14 00:56:51
oza @oza_x86

@repeatedly 途中で切れてた. すまぬ. メモリの可視性うんぬんの問題が出てくるのは MP環境の OoO 実行のときだけで、SP 環境では問題は発生しない. ロックすると実行順序がプログラムのレベルで保証されるので、大丈夫.

2010-04-14 01:05:58
SKS rep @repeatedly

つうことはGVLがなくなっちゃうと自分でメモリバリアを発行しないといけない訳か.まぁ既存ライブラリが全滅しちゃうからそういうことにはならないだろうけど…

2010-04-14 01:05:41
oza @oza_x86

@repeatedly 難しいだろうけど、既存のライブラリはGVLをエミュレーションするような環境で動かす、みたいなことになるかも?

2010-04-14 01:07:29
SKS rep @repeatedly

@oza_x86 それはそれでガッツリ重くなりそう.別モニタみたいなのが必要になりそうだよね > エミュレーション

2010-04-14 01:08:58
SKS rep @repeatedly

しかし俺の悩みがちっぽけ過ぎて @oza_gvl 先生の手のひらの上で踊っているかのようだ!

2010-04-14 01:09:41
SKS rep @repeatedly

ミスった.ここは @oza_gvl 先生より @oza_OoO 先生の出番だったかもしれぬ.

2010-04-14 01:10:59