ITパスポート 2018年 秋期 問59
問題文
マルチスレッドの説明として、適切なものはどれか。
選択肢
ア:CPUに複数のコア(演算回路)を搭載していること
イ:ハードディスクなどの外部記憶装置を利用して、主記憶よりも大きな容量の記憶空間を実現すること
ウ:一つのアプリケーションプログラムを複数の処理単位に分けて、それらを並列に処理すること(正解)
エ:一つのデータを分割して、複数のハードディスクに並列に書き込むこと
🔒 解説は解答すると表示されます
マルチスレッドの説明【ITパスポート 解説】
正解の理由
ウ「一つのアプリケーションプログラムを複数の処理単位に分けて、それらを並列に処理すること」がマルチスレッドの定義に合致します。
ここでの用語説明(初出)
- スレッド(thread):プログラムの中で実際に動く処理の最小単位。複数のスレッドで同じプログラム内の仕事を分担します。
- 並列(パラレル):同時に複数の処理を進めること。
マルチスレッドは「一つのプログラム(プロセス)の内部を複数のスレッドに分け、同時または同時に見えるように処理する仕組み」です。したがって、選択肢の記述がまさにこれを表しています。
解法ステップ
- 問題文で注目する語を見つける:「一つのアプリケーションプログラム」「複数の処理単位」「並列」。
- 「スレッド」の意味を当てはめる:プログラム内部での処理単位=スレッド。
- 他の選択肢が示す技術と照合する:ハードウェア(CPUコア)、記憶装置の仕組み、ディスク構成などはスレッドの説明ではない。
- 当てはまるものを選ぶ:プログラム内部の並列処理を説明しているものが正解。
選択肢別の誤答解説
- ア: CPUに複数のコア(演算回路)を搭載していること
- 説明:CPU(Central Processing Unit:中央演算処理装置)自体の構成を指します。これを「マルチコア(複数コア)」といい、ハードウェアの話です。マルチスレッドはソフトウェア側の処理単位の話であり、別概念です(ただしマルチコア上でスレッドを並列実行でき、相互に関連します)。
- イ: ハードディスクなどの外部記憶装置を利用して、主記憶よりも大きな容量の記憶空間を実現すること
- 説明:ハードディスク(HDD: Hard Disk Drive:磁気でデータを保存する外部記憶装置)を使って主記憶(RAM: Random Access Memory:作業領域)以上の容量を扱うのは「仮想記憶(virtual memory)」やスワップの説明です。マルチスレッドとは無関係です。
- ウ: 一つのアプリケーションプログラムを複数の処理単位に分けて、それらを並列に処理すること
- 説明:ソフトウェア内部で処理をスレッドに分割し、同時(あるいは並行)に処理するという意味で、マルチスレッドの正しい説明です。
- エ: 一つのデータを分割して、複数のハードディスクに並列に書き込むこと
- 説明:複数ディスクへの分散書き込みは「ディスクストライピング(RAID 0など)」の説明です。RAID(Redundant Array of Independent Disks:複数ディスクを組み合わせる技術)の一種で、ストレージの話です。スレッドの定義ではありません。
よくある誤解
- マルチスレッド = マルチコア
- 誤解:マルチスレッドすると必ず速くなると思う。
- 正しくは:マルチスレッドはソフト側の仕組みで、マルチコアはハード側です。コアが複数あれば真の並列実行が可能ですが、コアが1つでも時間分割で「同時に動いているように」見せる(並行)ことはできます。
- スレッドは安全に勝手に共有メモリを使えると思う
- 誤解:スレッド同士が同じデータに同時に触っても問題ない。
- 正しくは:共有データを複数スレッドが同時に変更すると競合(レースコンディション)が起きます。排他制御(mutex:相互排他など)が必要です。
- どの言語でも同じ効果が出るわけではない
- 例えばPythonではGIL(Global Interpreter Lock:全体のロック)のため、CPU負荷の高い処理ではスレッドが期待通りの並列化をしないことがあります。
補足コラム
- 日常の例:ウェブブラウザはマルチスレッドで動きます。画面表示(UI)スレッド、ネットワークから読み込むスレッド、プラグインやレンダリングのスレッドなどに分かれ、画面を固まらせずにダウンロードや描画を同時進行できます。
- スレッドとプロセスの違い(かんたんに):プロセスは動くプログラム全体、スレッドはその中の細かい作業単位です。同じプロセス内のスレッドはメモリを共有しますが、別プロセス間は基本的に共有しません。
- 実務での注意:マルチスレッドで速くするには「並列化できる仕事か(独立して処理できるか)」「同期コストや共有資源による遅延がないか」を確認します。
FAQ
Q1. マルチスレッドは常に処理が速くなりますか?
A1. いいえ。並列化のための分割や同期にかかるコスト、CPUコア数、I/O待ちの有無などで速くならない場合があります。I/O待ちが多い処理では効果がありますが、単純なCPU計算でコア数が足りない場合は効果が小さいか逆に遅くなることもあります。
A1. いいえ。並列化のための分割や同期にかかるコスト、CPUコア数、I/O待ちの有無などで速くならない場合があります。I/O待ちが多い処理では効果がありますが、単純なCPU計算でコア数が足りない場合は効果が小さいか逆に遅くなることもあります。
Q2. スレッドが多いとメモリをたくさん使いますか?
A2. はい。スレッドごとにスタック領域などが必要です。大量のスレッドはメモリ消費や文脈切替(コンテキストスイッチ)でオーバーヘッドが増えます。スレッドプール(再利用)などで管理します。
A2. はい。スレッドごとにスタック領域などが必要です。大量のスレッドはメモリ消費や文脈切替(コンテキストスイッチ)でオーバーヘッドが増えます。スレッドプール(再利用)などで管理します。
Q3. スレッドを使うとクラッシュしたときに影響はどうなりますか?
A3. 同じプロセス内のスレッドが致命的なエラーを起こすと、プロセス全体(アプリ全体)が落ちることがあります。スレッド間でのエラー処理や分離設計が重要です。
A3. 同じプロセス内のスレッドが致命的なエラーを起こすと、プロセス全体(アプリ全体)が落ちることがあります。スレッド間でのエラー処理や分離設計が重要です。
関連キーワード: マルチスレッド, スレッド, 並列処理, マルチコア, 仮想記憶, ディスクストライピング, RAID, 同期, レースコンディション, スレッドセーフ

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

