プログラミングに詳しい優しい人、マルチスレッドについて聞きたい

1: 2019/08/20(火) 19:23:05.665 ID:s8TibpdAM
マルチスレッドとか意味わからんのだけど

超絶わかりやすく教えて?

3: 2019/08/20(火) 19:23:26.558 ID:qe6AlGM60
のうがにこある

8: 2019/08/20(火) 19:24:11.630 ID:s8TibpdAM
>>3
脳が二個あってそのやり取りを何でするんだ?

20: 2019/08/20(火) 19:28:27.139 ID:s8TibpdAM
処理を2手に分けて時間短縮してるだけか

30: 2019/08/20(火) 19:37:57.996 ID:1egmfbHn0
>>20
時間短縮以外にも、単にUI操作を止めたくないだけとかいう場合もある

33: 2019/08/20(火) 19:42:17.341 ID:N5NdrxE7M
>>30
バックグラウンドで画像とかダウンロードはしているけどUI上のボタンタップで画面遷移はできたりするってこと?

36: 2019/08/20(火) 19:46:40.589 ID:1egmfbHn0
>>33
そうだよ
あとはメニューから何か重い処理を実行した時に画面が止まらずに済んだり

37: 2019/08/20(火) 19:47:08.911 ID:N5NdrxE7M
>>36
おっけー
理解したわ!

21: 2019/08/20(火) 19:28:56.039 ID:vovTta440
カレーを二人で食べるのがマルチスレッド
カレーを半分ずつ皿にわけて食べるのがマルチプロセス

IT的に言うとメモリ空間を共有して2つのCPUで処理するのがマルチスレッド
メモリ空間をコピーして各々作業するのかマルチプロセス

マルチスレッドの場合は共有メモリを同時に触って情報共有
マルチプロセスは各プロセスのリターンを受け取って情報共有

新卒2年目だから間違ってたら許して

24: 2019/08/20(火) 19:30:58.964 ID:PgKUzzo60
>>21
有能

27: 2019/08/20(火) 19:31:57.335 ID:vovTta440
>>24
よかったー😃

29: 2019/08/20(火) 19:34:30.255 ID:N5NdrxE7M
>>21
メモリ空間をコピーして各々作業するのかマルチプロセスってところなんだが、ちゃんと各々別の箇所を処理するようにできてるんか?

32: 2019/08/20(火) 19:40:28.487 ID:vovTta440
>>29
別々の箇所をマルチで処理するならその対象を共有メモリにしてマルチスレッドで処理するほうがいんじゃね

34: 2019/08/20(火) 19:43:17.652 ID:N5NdrxE7M
>>32
なんとなくわかったわ
さんきゅー

23: 2019/08/20(火) 19:30:31.789 ID:Jj5/xAWTd
メモリの分散

25: 2019/08/20(火) 19:31:18.951 ID:PLT2DI4l0
並列vs並行

28: 2019/08/20(火) 19:34:25.958 ID:J/txlhqS0
await使う

31: 2019/08/20(火) 19:38:04.896 ID:6EJ6oc6Wa
スレッドは仮想CPUだからCPUを時間で分けて仮想的にCPUが複数あるように使うけどメモリは共有

プロセスは仮想コンピュータだからCPUもメモリも分けて仮想的にコンピュータが複数あるように使う

34: 2019/08/20(火) 19:43:17.652 ID:N5NdrxE7M
>>31
なんとなくわかったわ
さんきゅー

35: 2019/08/20(火) 19:45:59.221 ID:vu23bxie0
下手したらメモリーぐちゃぐちゃになりそう

43: 2019/08/20(火) 19:55:26.359 ID:9C9Vr15t0
>>35
ぐちゃぐちゃにならないように資源をロックして使う

40: 2019/08/20(火) 19:49:08.282 ID:4w82Cnt20
ねぇマルチスレッドって要は非同期処理するためのもんだよね?
それ以外に利用しないよね?

44: 2019/08/20(火) 19:55:38.379 ID:+y57eEio0
>>40
マルチスレッドはいつデータが届くか分からないような処理の時に使う
どういう場面で使うかって言うと大体ネット
TCP/IPによるソケット通信プログラムで使う

46: 2019/08/20(火) 19:59:34.817 ID:1egmfbHn0
>>40
非同期処理をするためのものではあるけれど、
並列処理のためにスレッドを使う場合は「非同期処理」と呼んでいいのか微妙かもしれん
別に非同期で実行することが目的なわけじゃないから

42: 2019/08/20(火) 19:50:52.600
この範囲から値を探す
スレッドで手分けして同時に進めていくのもマルチスレッド

45: 2019/08/20(火) 19:57:35.074 ID:4w82Cnt20
要はajaxみたいな用法にしか使わんのでしょ
なんかソートめっちゃ早くなるとかそういうのはないん

48: 2019/08/20(火) 20:04:37.735 ID:+y57eEio0
>>45
大量のデータに対して
ラムダ使ってストリームAPIで
マルチスレッドを使えば早くなるって奴か…

そんな難しい事が出来る奴がVIPなんぞにいるわけないわ

50: 2019/08/20(火) 20:12:21.275 ID:1egmfbHn0
>>45
スリープソートっていうジョークソートアルゴリズムがあるぞ

47: 2019/08/20(火) 20:01:33.036
もちろんあるよ

49: 2019/08/20(火) 20:07:42.351 ID:MEN6zuWgM
詳しくないけど動画のエンコード周りとかはそんな感じじゃねーの
同一プロセス内で複数スレッド走らせても意味なくね

53: 2019/08/20(火) 20:20:28.962 ID:9C9Vr15t0
>>49

マルチCPUとかマルチコアならCPUコアは別々に割り振られるから意味ある
シングルコアでもI/O待ちとかの都合で非同期に実行したい場合は意味ある

51: 2019/08/20(火) 20:14:39.560
マルチスレッドプログラミングならGo言語

52: 2019/08/20(火) 20:17:24.843 ID:NNcPDjZ/D
マルチプロセス特にforkしたとき、最初は親プロセスも子プロセスも同じ物理アドレス参照してるけど、どちらかが書き込みをしたらその時はじめてコピーを別の物理アドレスに作ってさらにそこに書き込みをする

コピーすると言っても最初から全コピー作るのは時間がかかるからコピーオンライトで遅延的にコピーしてる

54: 2019/08/20(火) 20:42:02.665
インテルのTSX命令は何のためにあるか洞察しろ
データベースのトランザクションをメモリレベルで実現するんだよ

55: 2019/08/20(火) 20:56:57.888 ID:b3hDXr7I0
ただしマルチスレッドは処理量が多い場合の1つの解決策でしかない

カレーくってうんこするまでの仕事ならたしかにカレーを食うやつがたくさんいたほうがたくさんうんこでる
でもカレーくいながらどんどんうんこ出せば1人でも困らない これがノンブロッキングI/Oだ

56: 2019/08/20(火) 21:08:39.653
本物のマルチスレッドプログラミングは、一つの仕事をスレッドで手分けして、無矛盾にメモリを共用しつつ
アムダールの法則限界まで倍速を追究するものだ
本質的に異なる仕事を異なるスレッドに割り当てるのは似非
本物のプログラマはキッシュを食べない