「マルチスレッド」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Fallout New Tokyo
1行目: 1行目:
 
'''マルチスレッド'''([[英語]]:multi thread)とは、ひとつの[[プロセス]]内で複数の[[スレッド]]を使用することである。
 
'''マルチスレッド'''([[英語]]:multi thread)とは、ひとつの[[プロセス]]内で複数の[[スレッド]]を使用することである。
  
== 概要 ==
+
== 利点 ==
マルチスレッドとは、[[バグ]]の温床であり、[[デバッグ]]が非常に難しいのが特徴である。そのため[[業務アプリ]]の世界では[[禁忌]]であり基本的に登場しない技術である。
+
=== マルチコアCPUを有効活用できる ===
 +
マルチコアCPUを有効活用できる。
 +
だいたい「コア数の2倍」くらいまでのスレッド数までは有効。
  
初期の[[Windows]]では全てがスレッドであった。
+
== 欠点 ==
 +
=== 負荷 ===
 +
「マルチスレッドを使用する準備」に一定の負荷がかかる。
 +
このため負荷は「スレッドの準備」と「スレッドでの処理」を合算したもので考える必要があり、あまりに負荷が小さい処理だと逆に遅くなる傾向がある。
 +
 
 +
この問題を解決する手法としてスレッドを使い回す「[[スレッドプール]]」という手法が考案されているが、あまりに負荷が小さい処理だと「スレッドに[[データ]]を渡す処理」でやっぱり遅くなることがある。
 +
 
 +
=== 不具合の温床 ===
 +
マルチスレッドは、[[バグ]]の温床であり、[[デバッグ]]が非常に難しいのが特徴である。そのため[[業務アプリ]]の世界では[[禁忌]]であり基本的に登場しない技術である。
 +
 
 +
== 備考 ==
 +
初期の[[Windows]]では「全てがスレッド」であった。
 
[[UNIX]]における[[fork]]の感覚で[[プロセス]]を作ったつもりでも実際は[[スレッド]]が作られた。
 
[[UNIX]]における[[fork]]の感覚で[[プロセス]]を作ったつもりでも実際は[[スレッド]]が作られた。
Windowsという1つのプロセスの中で、アプリという子スレッドが次々と生まれたのである。
+
Windowsという1つのプロセスの中で「アプリ」という子スレッドが次々と生まれたのである。
 
そのため[[プログラム]]が少しでも[[バグ]]ると[[OS]]を巻き込み[[クラッシュ]]した。
 
そのため[[プログラム]]が少しでも[[バグ]]ると[[OS]]を巻き込み[[クラッシュ]]した。
 
一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。
 
一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。
 
==応用例==
 
* [[バックグラウンド]]で重い処理をしても、[[UI]]の動作を止めない([[応答なし]]にならない)ことができる。
 
* [[BOINC]]の計算をしながら[[動画]]を見たり[[webブラウズ]]をしたりできるのもマルチスレッドの一種。
 
  
 
==関連項目==
 
==関連項目==
19行目: 28行目:
 
* [[マルチコア]]
 
* [[マルチコア]]
 
* [[OpenMP]]
 
* [[OpenMP]]
 
== 参考文献 ==
 
{{reflist}}
 
 
{{stub}}
 

2022年9月30日 (金) 02:24時点における版

マルチスレッド英語:multi thread)とは、ひとつのプロセス内で複数のスレッドを使用することである。

利点

マルチコアCPUを有効活用できる

マルチコアCPUを有効活用できる。 だいたい「コア数の2倍」くらいまでのスレッド数までは有効。

欠点

負荷

「マルチスレッドを使用する準備」に一定の負荷がかかる。 このため負荷は「スレッドの準備」と「スレッドでの処理」を合算したもので考える必要があり、あまりに負荷が小さい処理だと逆に遅くなる傾向がある。

この問題を解決する手法としてスレッドを使い回す「スレッドプール」という手法が考案されているが、あまりに負荷が小さい処理だと「スレッドにデータを渡す処理」でやっぱり遅くなることがある。

不具合の温床

マルチスレッドは、バグの温床であり、デバッグが非常に難しいのが特徴である。そのため業務アプリの世界では禁忌であり基本的に登場しない技術である。

備考

初期のWindowsでは「全てがスレッド」であった。 UNIXにおけるforkの感覚でプロセスを作ったつもりでも実際はスレッドが作られた。 Windowsという1つのプロセスの中で「アプリ」という子スレッドが次々と生まれたのである。 そのためプログラムが少しでもバグるとOSを巻き込みクラッシュした。 一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。

関連項目