[過去ログ] Go language part 3 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
812
(1): デフォルトの名無しさん [sage] 2020/11/01(日) 17:19:00 ID:MfA1nG9+(13/13) AAS
>>807
807(3): デフォルトの名無しさん [sage] 2020/11/01(日) 16:52:55 ID:0aiHjqpe(8/12) AAS
>>806
確認した。(日本語版だけ。英語版は後で読んで少なくとも感想は返す)
スライド若干間違ってる、というかこいつ自身同期分かってねえ感じだが、ソフト屋ならこんなもんだろう。
ただいずれにしろ結論として、「共有メモリは遅いから使うな」で良いし、実際それ以上の理解は現実的に必要ない。

>>805
話がずれているのは俺がgreenthreadの定義を狭く捉えすぎていたからだな。
その記事で言う N : 1 だと思っていた。
これまでの俺のgreenthreadについての書き込みは全てこの定義だ。
だから当然他CPUを掴めないので高速化しようがない。

ただしGoが M:N なのは分かった。
しかしこの場合にCPUを跨ぐ為には当然OSのサポートが必要で、
当然そのスライドでもメッセージをkernelに投げてる。

問題はM:Nだと大して美味しくもないことだよ。
いや、Go界では当然凄く美味しいことになってるんだろうけど、N:1だと使える爆速最小実装がまるで使えない。
なら次段階は通常は「常に同一コアに割り当てるスレッド」をグルーピングしてその間だけでもこれを利用しよう、となるところだが、これもやってない。
勿論こんな事をやると思想に反するからだろうけど。

ただまあ、思想として、スケジューラ周りをランタイムに丸投げして「どんなスケールでも最大効率」を目指してるのは分かった。
とはいっても、メッセージをkernelに投げざるを得ない構造になってるから、改善余地があるとすればスケジューラ程度でしかない。
そして、俺は別段OSのスケジューラが間抜けとも思えないけど。
あれ、CPUが余ってたら振ってくるだけだし、実際演算とかで100%CPU掴む環境ならそれで必要十分だからね。
あるだけよこせならpriorityを上げればいいだけだし。

あと強いて言うならスレッドのスタックサイズが小さく済むことか?
しかしあれ、俺は知らんがthreadがOS管轄ならOS単位でしか指定出来ないものなのか?
それも奇妙だと思うから、普通はシステムコール時に引数与えて指定出来て然るべきであって、
今のLinuxがそうなってなくても当然いつかそうなるものだとも思うけど。
少なくとも.NETはnew Treaadでスレッドの最大サイズを指定出来る。
こいつもランタイムが管理するスレッドかもしれんけどさ。
CPUをまたぐ場合にはOSのサポート、もちょっと違うだろ。
あくまでグリーンスレッドで、ネイティブスレッドじゃねえぞ。
システムコールだったり、アトミックに処理ができるだったりでタスク覗くときにどうなってるよって話じゃねえの?
814
(1): デフォルトの名無しさん [sage] 2020/11/01(日) 18:37:50 ID:0aiHjqpe(9/12) AAS
>>810
810(1): デフォルトの名無しさん [sage] 2020/11/01(日) 17:12:55 ID:MfA1nG9+(11/13) AAS
>>807
ソフト屋ソフト屋と言ってるが、何屋なんよ。
解ってないと言うか、お前が何か変な想定してると思うぞ。

M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて、スケジューラのソースはgithubにあるはずだが、読んだ?
stealは無差別にstealする訳じゃないぞ。

1コアあるだけよこせだと、IOバウンドな処理の時に勿体ないでしょ。

小さく済むと言うか、バカほど立てられるんよ。
.Netの話はネイティブスレッド。お前ホント理解できてないのな。
> M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて
俺は別に美味しいとは思ってないぞ。
M:NならOSのスケジューラと大差ない筈だし、
実際ランタイム判断でN:1に出来る状態でもNodeに負けてるだろ。
カッコイイスケジュールをやりきるより、スケジュールなんてしない、の方がシンプルで速いんだよ。
Goは例の「一方ロシアは鉛筆を使った」のアメリカ側をやりきってる感じがある。
とはいえそれもソフトウェア全体の成長の芽の一つだから、やること自体は頑張れ、でしかないが。

> スケジューラのソースはgithubにあるはずだが、読んだ?
読んでねえよ。ただ、読む価値ねえから読まねえよ。遅いスケジューラなんて意味ねえし。

> Netの話はネイティブスレッド
つまり普通のスレッドだろ?ならWindowsはスレッドのスタックサイズを指摘出来ることになる。
Linuxでこれが出来ないとも思えないので、goroutineは軽いんです、なんて利点はなくなると思うが。

>>812
そりゃお前が理解出来てないと思うぞ。
上述の通り、スライドでもメッセージをkernelに投げてるだろ。
そこを同一CPU内にディスパッチされた場合にのみN:1専用超軽量ルーチンで処理するよう、
スレッドスイッチの際に全部張り直す、というのもありだが、実際それやってても大して速くないと思うぞ。

そこは本来はプログラミングモデルを明示的に変えないと駄目なんだよ。
同一CPU内でのみ動作するスレッドであれば、スイッチのコストはほぼゼロだから、がんがん切り出して問題ない。
一方、メッセージにkernelを挟む必要があるのなら、それはそれだけでコストがかかるから、何でもかんでも切り出したら余計遅くなる。
だから本来は goroutine のみではなく、 golight とか、N:1スケジュール専用のgoroutineを用意しないと駄目なんだ。
それがなくて全部goroutineで扱うから全体的に遅くなってしまう。それがブログ主がやった事だよ。
ただこれを分離するのは思想的にやりたくないんだろ?ならそこが限界だよ。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s