[過去ログ] Go language part 3 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
781(2): 2020/11/01(日)08:14 ID:0aiHjqpe(1/12) AAS
>>780
> goのスタックフレームつまり自動変数も他の言語とは隔絶
どこが?サイズだけならCは調整出来たと思ったけど
> そのため、数百万のgoroutineを作成できる
それは既に結論は出てる。
以下ブログ、俺が読んだ時とはだいぶ趣が異なるが、(当時は確か初期サイズ4KBだったはず)
外部リンク:github.com
要は2KBでも十分大きすぎて、Nodeの方が断然まし、ってことになってる。
これは当たり前で、Linuxのkernel領域でのスタックサイズが128Bだったか256Bかに制限されているらしいから、
その気になればLinuxは256B/threadでスレッドを起動出来る。
省16
784(2): 2020/11/01(日)10:42 ID:0aiHjqpe(2/12) AAS
>>782
逆に言えばそれ以外の環境では他言語に劣るわけだろ。
元々は多分、命名からして、コルーチンをgoroutineで、ということなのだと思う。
コルーチンは通常は本体側と交代で間欠的に動作する前提で書かれているから、スレッドで切り離すことはしない。
ただ、もしそれが本体と並行に動作可能なら、スレッドとして切り離せば、
本体側が動いている間に次のyieldまで動作させられ、コルーチン部分の処理時間を見た目ゼロに出来る。
実際、大半のコルーチンはこれが可能なはずで、これまでは単に面倒/スレッド生成消滅のコストの為にそこまでやらなかっただけ。
だから、スレッドよりもっとお手軽で軽いgoroutineを用意すれば、という訳だ。
OSでの並行はprocessだが、multi processは重すぎるのでアプリ内processとしてthreadが出来た。
それと同様に、thread内の並行として、goroutineという、もう一段軽い物を用意した。
省7
785(1): 2020/11/01(日)10:42 ID:0aiHjqpe(3/12) AAS
だから、>>782の観点だけなら、
Goは素晴らしい実験用言語だったけど、現実的ではなかったね、で終わると思うよ。
実際、Goって使用者は増えてるのか?
Rustは前年度「Rust新規に始めた人数よりCを新規に始めた人数の方が多くなっちまったよオイオイ」とか話題になっていたが。
JSはプログラマに、I/Oを明示的に切り離して高速化することを求め、(実際あの非同期は壮絶にウザイが)現実的にはものすごく機能してる。
Goはプログラマに、並行可能な部分を積極的に切り離すことにより超並行によって高速化を目指している、と捕らえることは出来るが、
実際これは全く上手く行ってないし、今後とも上手く行く気配もないでしょ。
一時期、CUDAよりもXeonPiだ、という時期もあったはずだけど、なんか話題はCUDAに戻ってるしさ。
793(1): 2020/11/01(日)11:52 ID:0aiHjqpe(4/12) AAS
>>788
> グリーンスレッド
この言葉は初めて聞いたが、確かにJavaやRubyでは普通に使われてる言葉らしい。意味は確認した。
なるほど、スレッドだと論理CPUを跨げるので、その部分がOS管轄になるから重いのか。
goroutineがグリーンスレッドなら、マルチコアだと全く性能が出ないな。
まあそれはいいとして。
なら、そもそもネーミングが悪いよ。
gogreenthreadとか、まんまの名前の方が良かったよ。
(ただしGoは意図的に他言語に合わせてない部分があるからここもかもしれんが)
確かにthreadではないのは理解した。
省13
795(1): 2020/11/01(日)12:21 ID:0aiHjqpe(5/12) AAS
>>791
まあとにかくgreenthreadだというのは理解した。
(仕様を確認したわけではなく、そちらの主張通りの方が色々辻褄が合うからそうなのだと思う)
> await asyncは自動的にされてると思って良いぐらい。
それはgreenthreadの話ではなく、他の普通のマルチスレッド言語は全部そうだよ。
実際、PHPが使いやすいのはこれだし。
むしろJSだけが異端。ただし、俺はあれはそうする意味があったと思っている。
>>792
> コルーチンを指向していたならchannelなんて使わんだろう。
これは間違い。
省9
796(1): 2020/11/01(日)13:36 ID:0aiHjqpe(6/12) AAS
>>791
ちなみにgreenスレッドスイッチは何で起動してるか分かるか?
なおgreenthreadについてはありがとう。これだと色々辻褄が合う。
781のブログも、「そもそもgoroutineってそんなに使いたいか?」という疑問があったのだが、
greenthreadでchannel同期なら、実装は単なるFIFO=リングバッファだから原理的に最速だ。
だから何でもかんでも「goroutineに出来る物はgoroutineにする」という方向性で悪ノリしたくなるのは分かる。
ただ、2KBはオーバースペック過ぎるから、それで頓死するのも分かる。
さてスレッドスイッチ、理想的にはキャッシュミスでgreenthreadスイッチが行われればいいのだが、
現状のx86ではこれは出来ないよな?
そもそも例外はOSに行ってしまうし、キャッシュミス時はそのCPUスレッドはそこでストールしてしまう。
省13
800: 2020/11/01(日)13:47 ID:0aiHjqpe(7/12) AAS
>>797
それはわりとどうでもいいな。
だったらgoroutineの初期値も0であるべきだよ。
スレッド同期に2KBなんて普通は必要ないし。
とは781のブログからなら思うが、要はそんなケチ環境は相手してないって事か。
まあそれもありだな。
807(3): 2020/11/01(日)16:52 ID:0aiHjqpe(8/12) AAS
>>806
確認した。(日本語版だけ。英語版は後で読んで少なくとも感想は返す)
スライド若干間違ってる、というかこいつ自身同期分かってねえ感じだが、ソフト屋ならこんなもんだろう。
ただいずれにしろ結論として、「共有メモリは遅いから使うな」で良いし、実際それ以上の理解は現実的に必要ない。
>>805
話がずれているのは俺がgreenthreadの定義を狭く捉えすぎていたからだな。
その記事で言う N : 1 だと思っていた。
これまでの俺のgreenthreadについての書き込みは全てこの定義だ。
だから当然他CPUを掴めないので高速化しようがない。
ただしGoが M:N なのは分かった。
省17
814(1): 2020/11/01(日)18:37 ID:0aiHjqpe(9/12) AAS
>>810
> M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて
俺は別に美味しいとは思ってないぞ。
M:NならOSのスケジューラと大差ない筈だし、
実際ランタイム判断でN:1に出来る状態でもNodeに負けてるだろ。
カッコイイスケジュールをやりきるより、スケジュールなんてしない、の方がシンプルで速いんだよ。
Goは例の「一方ロシアは鉛筆を使った」のアメリカ側をやりきってる感じがある。
とはいえそれもソフトウェア全体の成長の芽の一つだから、やること自体は頑張れ、でしかないが。
> スケジューラのソースはgithubにあるはずだが、読んだ?
読んでねえよ。ただ、読む価値ねえから読まねえよ。遅いスケジューラなんて意味ねえし。
省14
815(1): 2020/11/01(日)20:10 ID:0aiHjqpe(10/12) AAS
>>806
さて英文の方も読んだ。
なるほどGCの為にスレッドの動作状況を調整する必要があるから、スケジューラはどのみち内部に必要なのか。
これは俺はCでしかスレッドを使ってないから気づかなかったわ。
ただその後GoはノンストップGC入れたと聞いたから今は要らんだろとも思うが。
Syscallの時にハンドオーバーしたいのは、ぶっちゃけもう一つthreadを立てておけば済む話だよね。
(GOMAXPROCSをCore数ではなく、Core数+αにする。ただしそれに似たような話は書いてあるが)
内容は日本語版と同じだね。そりゃそうだが。
ただ、英語版の方が確かに実装した理由が書いてあったから読み物としては良いが。
819(1): 2020/11/01(日)20:53 ID:0aiHjqpe(11/12) AAS
一応調べたぞ。
スレッドのスタックサイズは、
.NETのはデフォ1Mで最小値はシステムによるがVista(.NET2.0)なら256KBだそうな。
それより新しいのはよく分からんがこの雰囲気だと64KBか。
外部リンク[1]:docs.microsoft.com
外部リンク:docs.microsoft.com
pthreadはこちらも具体的には書いてないから推測になるが、
oracleが16KB指定してるし、MANPAGEにも書いてあるからここまでは行けるのは確実。
オーバーフロー検出の項目で1ページ以下にも指定出来るとあるから、
スタックサイズは4KBかそれ以下にも指定出来るとも思われるが、断定は出来ない。
省4
821(1): 2020/11/01(日)21:30 ID:0aiHjqpe(12/12) AAS
>>816-817
実際Nodeに負けてるのは事実だし、あのブログ読んで技術的に俺は納得してる。
782も納得してるし、他の連中もあの貧弱環境ならそうだな、となると思うが。
ちなみに当たり前だが全ての環境で全敗するわけではないぞ。
俺も数年前に味見でPHP/Node/Goで同じものをPCのXAMPP上で試したが、
GoはNode比2倍、PHP比6倍のパフォーマンスが出た。
(僕のカワイイGoを虐めるな!って感じだから、、これを言ったら満足するか?)
それで俺はPHPで行くことに決定した。
PHPのパフォーマンスで俺には十分だったし、無料鯖は現状PHPのみだからだ。
そしたらGoでやってた奴が「ゴラアふざけんな!」って言ってきたが「知るかボケ」と返した。
省13
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.043s