メインメニューを開く

差分

マルチスレッド

1,972 バイト追加, 2022年9月30日 (金) 02:29
'''マルチスレッド'''とは、複数の([[英語]]:multi thread)とは、ひとつの[[プロセス]]内で複数の[[スレッド]]を使用することである。
==応用例利点 ==* バックグラウンドで重い処理をしても、=== マルチコアCPUを有効活用できる ===マルチコアCPUを有効活用できる。だいたい「コア数の2倍」くらいまでのスレッド数までは有効。 == 欠点 ===== 準備の負荷 ===「マルチスレッドを使用する準備」に一定の負荷がかかる。スレッドを利用するには、スレッドを生成したり、スレッドにデータを渡したりという前処理が必要となる。 このため負荷は「スレッドの準備」と「スレッドでの処理」を合算したもので考える必要があり、あまりに負荷が小さいスレッドでの処理だと逆に遅くなる傾向がある。 この問題を解決する手法としてスレッドを使い回す「[[UIスレッドプール]]の動作を止めない(」という手法が考案されているが、あまりに負荷が小さいスレッドでの処理だと「スレッドに[[応答なしデータ]]にならない)ことができるを渡す処理」でやっぱり遅くなることがある。 * [[BOINCゲーム]]の計算をしながらでマルチスレッド対応(マルチコア対応)が進まない原因はだいたいこれである。ゲームでは「60fps=1処理0.016秒以内」という制約が定番なのでスレッドを準備している余裕がない。 === 不具合の温床 ===マルチスレッドは、[[バグ]]の温床であり、[動画[デバッグ]]を見たりが非常に難しいのが特徴である。そのため[[webブラウズ業務アプリ]]をしたりできるのもマルチスレッドの一種の世界では[[禁忌]]であり基本的に登場しない技術である。 == 備考 ==初期の[[Windows]]では「全てがスレッド」であった。[[UNIX]]における[[fork]]の感覚で[[プロセス]]を作ったつもりでも実際は[[スレッド]]が作られた。Windowsという1つのプロセスの中で「アプリ」という子スレッドが次々と生まれたのである。そのため[[プログラム]]が少しでも[[バグ]]ると[[OS]]を巻き込み[[クラッシュ]]した。一方でマルチスレッドでも比較的安全になるような工夫も多く生まれ、後のマルチスレッド流行時には積み重ねた対応度の良さが目立った。
==関連項目==
* [[マルチスレッド (物理)]]
* [[マルチスレッド線型探索]]
* [[マルチコア]]
* [[OpenMP]]