「マルチスレッド」の版間の差分
imported>Fallout New Tokyo 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| 1行目: | 1行目: | ||
'''マルチスレッド'''([[英語]]:multi thread)とは、ひとつの[[プロセス]]内で複数の[[スレッド]]を使用することである。 | '''マルチスレッド'''([[英語]]:multi thread)とは、ひとつの[[プロセス]]内で複数の[[スレッド]]を使用することである。 | ||
== | == 利点 == | ||
=== マルチコアCPUを有効活用できる === | |||
マルチコアCPUを有効活用できる。 | |||
だいたい「コア数の2倍」くらいまでのスレッド数までは有効。 | |||
初期の[[Windows]] | == 欠点 == | ||
=== 負荷 === | |||
「マルチスレッドを使用する準備」に一定の負荷がかかる。 | |||
このため負荷は「スレッドの準備」と「スレッドでの処理」を合算したもので考える必要があり、あまりに負荷が小さい処理だと逆に遅くなる傾向がある。 | |||
この問題を解決する手法としてスレッドを使い回す「[[スレッドプール]]」という手法が考案されているが、あまりに負荷が小さい処理だと「スレッドに[[データ]]を渡す処理」でやっぱり遅くなることがある。 | |||
=== 不具合の温床 === | |||
マルチスレッドは、[[バグ]]の温床であり、[[デバッグ]]が非常に難しいのが特徴である。そのため[[業務アプリ]]の世界では[[禁忌]]であり基本的に登場しない技術である。 | |||
== 備考 == | |||
初期の[[Windows]]では「全てがスレッド」であった。 | |||
[[UNIX]]における[[fork]]の感覚で[[プロセス]]を作ったつもりでも実際は[[スレッド]]が作られた。 | [[UNIX]]における[[fork]]の感覚で[[プロセス]]を作ったつもりでも実際は[[スレッド]]が作られた。 | ||
Windowsという1つのプロセスの中で「アプリ」という子スレッドが次々と生まれたのである。 | |||
そのため[[プログラム]]が少しでも[[バグ]]ると[[OS]]を巻き込み[[クラッシュ]]した。 | そのため[[プログラム]]が少しでも[[バグ]]ると[[OS]]を巻き込み[[クラッシュ]]した。 | ||
一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。 | 一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。 | ||
==関連項目== | ==関連項目== | ||
| 19行目: | 28行目: | ||
* [[マルチコア]] | * [[マルチコア]] | ||
* [[OpenMP]] | * [[OpenMP]] | ||
2022年9月30日 (金) 02:24時点における版
マルチスレッド(英語:multi thread)とは、ひとつのプロセス内で複数のスレッドを使用することである。
利点
マルチコアCPUを有効活用できる
マルチコアCPUを有効活用できる。 だいたい「コア数の2倍」くらいまでのスレッド数までは有効。
欠点
負荷
「マルチスレッドを使用する準備」に一定の負荷がかかる。 このため負荷は「スレッドの準備」と「スレッドでの処理」を合算したもので考える必要があり、あまりに負荷が小さい処理だと逆に遅くなる傾向がある。
この問題を解決する手法としてスレッドを使い回す「スレッドプール」という手法が考案されているが、あまりに負荷が小さい処理だと「スレッドにデータを渡す処理」でやっぱり遅くなることがある。
不具合の温床
マルチスレッドは、バグの温床であり、デバッグが非常に難しいのが特徴である。そのため業務アプリの世界では禁忌であり基本的に登場しない技術である。
備考
初期のWindowsでは「全てがスレッド」であった。 UNIXにおけるforkの感覚でプロセスを作ったつもりでも実際はスレッドが作られた。 Windowsという1つのプロセスの中で「アプリ」という子スレッドが次々と生まれたのである。 そのためプログラムが少しでもバグるとOSを巻き込みクラッシュした。 一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。