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