はじめまして。
質問があります。
現在マルチスレッドプログラミングについて学習しているのですが、
学習を進めていくうちにある疑問が思いつきました。それは、
マルチスレッドで実装した方がよい場合とシングルスレッドで実装
した方がよい場合の区別がよくわからないということです。マルチスレ
ッドで実装する利点は、例えば、応答性を向上させるとか、
入出力操作が関わっているときにCPUの空き時間を利用して別スレッド
で処理を行わせることによってスループットを向上させることぐらいしか思いつきません。また、CPUが1個しかない環境では、
CPUをフル活動するようなプログラムでは、下手にマルチスレッドで
実装するよりもシングルスレッドで実装したほうが排他制御しない
分だけ処理スピードは上であると思っているのですが、間違いでしょうか?マルチスレッドで実装した場合の利点は上述したこと以外にも
何かあるのでしょうか?ご教授お願いします。
No.1ベストアンサー
- 回答日時:
その通りです。
人間とコンピュータ、CPUとハードディスク、ローカルとリモート、ディスク装置と印刷装置など、コンピュータシステムの中には全くスピードの異なるものが多く存在しています。遅い処理でブロッキングされないようにバックグラウンドで処理したいというのが基本的な発想です。
特定のマシン自体を専用で処理させる方が速いにきまっています。
ただし最近では、マルチCPU/マルチコアが当たり前となっていきますし、将来の並列マシン環境などを想定すると、複数のCPUで作業を分担して処理速度の向上を図ることも普通のこととなっていくでしょう。
マルチスレッド(並列処理)の弊害についてもその通りで特にリモートシステム間で共有するデータ(分散DBやスーパーアレイの共有テーブルなど)の排他がボトルネックとなってしまいます。設計により排他を免疫することは可能ですが、スレッドのスイッチなどのオーバーヘッドは消えません。
最後にマルチスレッドで実装した場合の利点ですが、マルチスレッドでのプログラミングは(多くの人の予測に反して)単純でわかりやすいことです。複数のデータ源から様々なタイミングで割り込みやイベントが発生するシステムのプログラミングは非常に複雑です。これらを専任のスレッドに処理させて、同一の受け口(キューなどの)から受信できるように構造化して設計すると、個々のロジックはシングルスレッド的にコーディングできるので、コーディングもデバッグもやりやすくなります。また、データ源が増えたり変更されたりした場合にも影響範囲が限定されます。ロジックの再利用もやりやすくなります。例えばWindowsソケットからBSDソケットにポーティングする場合、非同期I/O・同期I/Oの違いにより設計を根本的に変更する必要が発生しますが、バックグラウンドのスレッドに同期I/Oをさせる設計にしておけば、ポーティングしやすくなります。
私の場合、非同期I/OのAPIが別途用意されている環境でも、標準的な同期I/Oを用いて処理する専任のスレッドを割当てるように設計することが多いですね。
guccii様へ
ご回答ありがとうございました。
guccii様のご回答を読ませていただきまして、学習の余地が大分ありますが、基本的なマルチスレッドプログラミングを学習する上での方向性を見出せましたことに感謝します。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CPUの問題について 2 2022/07/09 12:04
- その他(教育・科学・学問) 大学理系研究室における器材の貸し出しや取り決めについて 1 2022/12/01 22:04
- 医師・看護師・助産師 看護専門学校の入学志望動機の添削をお願い致します(400~800字以内) 2 2022/07/17 14:39
- 画像編集・動画編集・音楽編集 【急】【Zbrush】3DCG初心者です。ノートPCでのZbrush動作環境につきまして 1 2023/08/19 17:38
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- ビデオカード・サウンドカード 1つのマザボでAMD&NVIDIAを同時使用できますか? 3 2022/04/22 14:36
- 政治 日本で訴訟件数が少ないのは、自民党とビッグモーターが詐欺組織だからですか? 2 2023/07/27 11:30
- その他(パソコン・スマホ・電化製品) Apple Watchの向きについて 2 2022/07/24 15:46
- 教育・学術・研究 情報系の学部で卒業研究中の大学四回生です。 現在、卒業研究中なのですが不安に感じることがあるので質問 2 2022/09/09 00:19
- 中途・キャリア 至急。転職試験合否について。 ご覧頂きありがとうございます。 転職を試みている社会人2年目20歳の第 4 2023/01/07 21:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
アコーディオンメニューをアン...
-
vba Sleep関数について教えてく...
-
[Java] while(true)の意味
-
JavaでVBのDOEVENTSと同様の処...
-
jQueryでdiv作成後まで待ってか...
-
Class.ForName("sun.jdbc.odbc....
-
JAVAからJAVASCRIPT関数を呼び出し
-
SwingUtilities.invokeLater(ne...
-
印刷プレビュー表示したい .NET
-
ExcelVBA で文字列の特定の文字...
-
JSPで「処理中」をブラウザに表示
-
XMLHttpRequestのsendメソッド
-
バッチって何でしょうか?
-
Tomcat高負荷時の設定について
-
マルチスレッドプログラミング...
-
jQueryの処理順序について
-
4人プレイの七並べGAMEを作りた...
-
(急募)Javaで「.CSV」のデータ...
-
Javaでのデバッグコード削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
doGetとdoPostの違い
-
JavaScriptからJAVAクラスを呼...
-
Javaでのデバッグコード削除
-
WPF C#でF10のイベント取得方法...
-
数値の定数を付ける時
-
Tomcat高負荷時の設定について
-
Javaプログラムからポップアッ...
-
JavaでVBのDOEVENTSと同様の処...
-
JSP、サーブレットの初期処理
-
switch文の中に、throws new Ex...
-
ラジオボタンの選択判定
-
VBScriptでのWord印刷
-
ExcelVBA で文字列の特定の文字...
-
ftp 同時複数接続の負荷テスト...
-
Javaアプリケーション実行の返...
-
C#で別スレッドの終了を知りたい
-
ブラウザを閉じた後のサーバ側...
-
javaのプログラムが止まる
-
flush()メソッドについて・・・
おすすめ情報