rebuildfm 53で話題になったRubyのスレッドに関係したつぶやき

16
wyukawa @wyukawa

RubyだとGILがあるからマルチコアがいかせないとか批判する人いるけど、そのくせシングルスレッドで動くnode.jsをほめるのは矛盾じゃないのかというのは確かにw #rebuildfm

2014-08-08 17:44:26
Kiyoshi Nomo 🐟☔️🍈🍋🍜 @kysnm

#rebuildfm 53: Less Code Is Better Code (Matz) 聞いた。Node.js がシングルスレッドで CPU 使い切れないの結構言われてますよ

2014-08-08 19:05:59
Yosuke Furukawa @yosuke_furukawa

@kysnm あれ未だにそんなこと言われます?? clusterとかあるのに...後で聞こ

2014-08-08 21:24:15
Kiyoshi Nomo 🐟☔️🍈🍋🍜 @kysnm

@yosuke_furukawa あれ、僕すごい勘違いしてる?言われてみると numCpus とかでコア数は見てますね

2014-08-08 22:22:51
Yosuke Furukawa @yosuke_furukawa

@kysnm コア数分のCPU使い切れないとか最初の方のNode.jsではよく言われてたんですけど、clusterとか出てきててマルチコア使い切れないわけじゃないよなぁとは思います。未だにそれが言われると微妙ですね。あんまり知られてないならその辺もLLDiverとかで言わないと。

2014-08-08 22:26:35
そのっつ (Naotoshi Seo) @sonots

@yosuke_furukawa @kysnm CRubyはGVLがあるのでコア使い切ろうと思ったら同じ数のプロセスたちあげないといけない。

2014-08-08 22:30:54
Yosuke Furukawa @yosuke_furukawa

@sonots @kysnm まだrebuild聞いてないんだけど、そういう話なのかな。Node.jsのclusterも内部的には同じ数のプロセス立ち上げてるだけだからやってることは同じだけども。

2014-08-08 22:32:24
Yosuke Furukawa @yosuke_furukawa

@sonots @kysnm perlだって同じやろ、、、時代はJavaですよ。

2014-08-08 22:34:47
そのっつ (Naotoshi Seo) @sonots

@yosuke_furukawa @kysnm perl はスレッド切ったらコア使ってくれたはず

2014-08-08 22:35:13
Kiyoshi Nomo 🐟☔️🍈🍋🍜 @kysnm

@yosuke_furukawa 今回 Ruby の話で GIL があるからマルチコアで性能が出ない外してほしいって言われるけど言うほど簡単じゃない、Node 使ってる人はシングルプロセスだけど文句言わないじゃないかみたいな話だったんですよ

2014-08-08 22:43:03
そのっつ (Naotoshi Seo) @sonots

@yosuke_furukawa @kysnm スレッド切ったらスレッドセーフなコードを書かないといけないので、webアプリとかだったら prefork してマルチプロセスにしちゃったほうが開発が楽だと思います。そう、Java とは違ってね。

2014-08-08 22:44:37
songmu @songmu

@sonots @yosuke_furukawa @kysnm パールは1コアしか使わないけど、シングルスレッドでイベントループ回してではなくで、preforkすることが多いから複数コア使ってるだけだという認識。

2014-08-08 22:44:47
そのっつ (Naotoshi Seo) @sonots

@songmu @yosuke_furukawa @kysnm perl 詳しくないんですが、スレッド切ったらマルチコア使ってくれないんでしたっけ? Ruby には GVL があるから羨ましいなと思ってたり…

2014-08-08 22:46:34
徳永広夢 @tokuhirom

perlのスレッドはシェアードナッシンで、全部のものをピーコしてくれるので、コアは使い切りますよ。

2014-08-08 22:47:52
徳永広夢 @tokuhirom

ただ、全部コピーするならCoWなforkの方がメモリ効率がいいし、forkの方が生成速度が速いので、だれも使わないだけです。

2014-08-08 22:49:28
徳永広夢 @tokuhirom

perlのithreadは、win32用のfork emulationに過ぎないので、unixではforkの方が良い。

2014-08-08 22:51:15
そのっつ (Naotoshi Seo) @sonots

perl のスレッド、シェアドナッシングなのか。ちょっとカルチャーショック…

2014-08-08 22:53:17
songmu @songmu

@sonots @yosuke_furukawa @kysnm Perlはスレッド切ったら普通にシングルコアですが、スレッドは出来損ないなので普通は切るという感じだと思われます。

2014-08-08 22:58:10
Tatsuro Hisamori @myfinder

“perlthrtut - Perl におけるスレッドのチュートリアル - perldoc.jp” htn.to/em7pXF

2014-08-08 22:59:38
Tatsuro Hisamori @myfinder

最近のPerlだとそもそも -Dusethreads つけてconfigureしないと使えないのでは

2014-08-08 23:01:24
徳永広夢 @tokuhirom

スレッドは有効にするとパフォーマンスが劣化するので、デフォルトオフなのがperl ithreadです。

2014-08-08 23:02:55
fujiwara @fujiwara

perlのスレッドは歴史のある時点の徒花なので忘れましょう

2014-08-08 23:05:28
そのっつ (Naotoshi Seo) @sonots

「もしもあなたが他のスレッドの実装を経験したことがあるなら、事態は全く あなたの予想とは違うことがわかるでしょう。」

2014-08-08 23:09:21
そのっつ (Naotoshi Seo) @sonots

「広義の概念は同じです; しかし実装の詳細を調べだしたら、 あなたは失望するか混乱するかのどちらかになるでしょう。 あるいはその両方かもしれません。」

2014-08-08 23:09:26
songmu @songmu

PerlはリファレンスカウントだからCoW効かせやすいからforkでえーやんとか思ってたけど、RubyもGC改良してCoW効きやすくなったとか言ってて、詳細は分からないけど、技術の進歩ってのは凄いもんだな、と思いました。

2014-08-08 23:14:29