• ベストアンサー

「スレッド」の概念について質問

スレッドとは、「1つのプログラムにおいての1つの処理(メソッド)」のことで、これはシングルスレッドともよぶ。 マルチスレッドは、複数の処理を「同時に実行する」こと。但し、実際にはcpuは1つなので、擬似的に複数処理をしているようにみせかけている。 例えば、マルチスレッドは、ブラウザに例えれば、画像をダウンロードしながら、画面をスクロールしたりというように、複数の処理を同時に実行している。そして、この処理の1つ1つがスレッド。 こういうことでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

そんなとこです。 ノイマン型のコンピュータ(99.99%のコンピュータがそうです。)は逐次処理型と言って、一つの事しか出来ませんのでそのような事になります。昔IBMの大型汎用機(16bitマシン)でTSSというタイムシェアリング方式の端末を利用できました。(TSS=TimeShareringSystem) まあ、マルチスレッドで解りやすいのはカッコつきの計算でしょうか? X=(100×2)÷(10×2)なんて計算は、ノイマン型なら計算式を分解して100×2をやってAにストアし、10×2をBにストアしてからA÷Bをして結果を出す事になります。 マルチスレッドなら、一気にAとBを計算できますね。今のインテルやAMDのCPUはマルチスレッド対応の8コアとかの製品もありますね。ですからマルチスレッドは出来そうですが、このマルチスレッドをしようとするとOSのサポートが必要になります。OSがマルチスレッドのために手順を整理する必要がありそのためのオーバーヘッド時間が必要になり昔はマルチCPUでマルチスレッドを行なったりしていましたが、速い事は速いんですが2倍3倍という速度差にはなっていません。昔のサーバー用のマシンでは2CPUとか4CPU仕様のマシンもありました。

その他の回答 (2)

回答No.3

プロセスというのが1つのプログラムに相当します。 若干例外もありますが。 Excelとゲームを同時に起動しているとします。 Excel、ゲームがそれぞれ1つのプロセスです。 そしてゲームのプロセス内では 自分のキャラクタを動かしながら敵を動かし、 かつ画面描画をして、裏で音楽を鳴らす、 場合によっては効果音も出す、ということを並列でやってます。 それぞれがスレッドです。 これはCPUそのものがマルチスレッドに対応していて その機能を使っていることもありますし、 OSが擬似的にスレッド処理をしていることもあります。 また、CPUやOSの提供する機能を使わずに プログラムの仕組みだけで並列に処理しているように見せかけている場合もあります。 この場合は厳密にはスレッドとは言えないかもしれませんが 開発者がスレッドだといえばスレッドです(笑)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

付け加えれば「プロセス」と「スレッド」に違いがあります。 「プロセス」も処理単位ですがメモリ空間などは別れています。「スレッド」は「プロセス」内でメモリなどを共有します。 結果的に、「スレッド」は「プロセス」よりも「軽い」処理単位になります。 以前のLinuxなどではOSレベルで「スレッド」をサポートしていませんでしたが、現在は「clone」システムコールを用いることで、OSレベルのスレッドを実現しています。