• ベストアンサー

マルチスレッドとマルチプロセスの違い

マルチスレッドとマルチプロセスの違い は例えて言うなら1つのプロセスをデュアルコアで処理するのがマルチスレッドで 2つのプロセスをシングルコアで処理するのがマルチプロセスってことでいいですか?

noname#178821
noname#178821

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

  • ベストアンサー
回答No.2

結論から言えば、間違っています。 ただ、そのとらえ方は、あながち的外れでもないというところでしょうか。 まず、正解からいえば、文字通り、 マルチスレッド=複数のスレッドを並行して実行すること マルチプロセス=複数のプロセスを並行して実行すること です。 ちなみに、コア数は関係ありません。シングルコアでも、マルチスレッドでもマルチプロセスでも可能。 ということで、では、プロセスとかスレッドとかは何? ということになりますので、これは、詳しく勉強してみるといいと思います。 イメージとしては、もしも、Windows を使っているのであれば、タスクマネージャの、「プロセス」タブをみてください。 ここで、一覧表示されている一つ一つが「プロセス」です。 そして、「スレッド」という項目があると思います。 (標準では表示されていないかもしれません。この場合、表示メニューから、「列の選択」を選ぶと、その中に、「スレッドの数」というのが存在します。) ひとつのプロセスに、ひとつ以上の「スレッド」があるのがわかると思います。 スレッドというのは、こういう単位です。 今の Windows は、プロセスとして表示されている物を並行して実行しています。そして、個々のプロセスは、ひとつ以上のスレッドを持ちます。 スレッドというのは、直訳すれば、「糸」で、「処理の道筋」を意味します。メールソフトや、掲示板で、議論の流れを「スレッド」と表現する場合もありますが、これも、意味としては同じような物です。 ひとつのプロセスの中にも、いろいろな処理があります。 たとえば、ブラウザで、こういう文章の入力を処理していたり、それと並行して、サーバーにつないで、ページが更新されてないか確認して、さらに、別のところでは、画像をダウンロードしているかもしれません。 それらのひとつひとつがスレッドだと思って、大きな間違いはありません。 マルチスレッドが可能であれば、ひとつのブラウザで、コメントを読みながら、ページを表示しながら、ダウンロードしながら、どこかのサイトからストリーミングされている音楽を鳴らすことができるのです。 一方、こうして、ブラウザでコメントを読んでいる間に、別のソフト(たとえばメールソフト)が、メールを受信しているかもしれません。 これが、別個のソフトで実行されていれば、それぞれは、別のプロセスとして動いている(可能性が高い)わけです。 その意味で、 ・ひとつのプロセスの中の処理を並行しているのがマルチスレッド ・別々のプロセスを並行して処理するのがマルチプロセス というのは、イメージとしては間違ってないでしょう。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

プロセスとは何か、スレッドとは何かという事を調べるとわかると思います。 他の方が書いている通り、物理CPUの数とかコア数とは全く関係ありません。 プロセスとは、CPUの実行単位にメモリや使っているファイルがくっついたようなものです。 プロセスAとプロセスBは、データを保存するメモリを共有しないので、AとBとの間のデータのやりとりにはメモリ以外の手段を取る必要があります。共有メモリ、プロセス間通信、ファイル経由など。 スレッドとは、CPUの実行単位で、必ずプロセスに属します。1プロセスが1スレッドの事もあれば、1プロセスが複数のスレッドからなることもあります。 プロセスAに属するスレッド1とスレッド2は、データ保存用のメモリを共有するので、上とは逆に、スレッド1が使っているメモリ部分をスレッド2がむやみに書き換えたりしないようにしないといけません。 ある処理をするプログラムを書くときに、1プロセス1スレッドのプログラムにするのか、マルチプロセスそれぞれ1スレッドにするのか、1プロセスマルチスレッドにするのか、マルチプロセスそれぞれマルチスレッドにするのか、それぞれメリットデメリットがあるので、方式を検討して決定します。

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.1

一つのプログラム内の複数のスレッド(処理)を同時に実行するのが「マルチスレッド」。コア数は関係なし。 複数のコアで、独立してアプリケーションを同時実行するのが「マルチプロセス」。 だと思うけど、「プロセス」が何処までを意味しているのか質問分だけからだと不明。

関連するQ&A

  • マルチスレッドとマルチプロセス

    マルチスレッドとマルチプロセスの定義の違いについてお教えいただけませんでしょうか。

  • マルチスレッドとマルチプロセスでの速度の違い

    perlでバッチ処理を書いています。ループ処理に時間がかかるのでParallel::ForkManagerというモジュールを使いマルチスレッド化しています。 ふと思ったのですが、マルチスレッドにせず、単純にこのperlのスクリプトを同じタイミングで複数起動するだけでもマルチスレッド並に速度は向上するのでしょうか? ご教示くださいませ。

  • 【Ruby】マルチスレッドでなくマルチプロセスで

    以下の様なプログラムをマルチスレッドでなくマルチプロセスで実現したいです。 #!/usr/bin/ruby require 'thread' q=Queue.new data=%w(a * * * b * * c * * d * *) data.each do |d| q.push d end (1..4).each do |n| Thread.start { while 1 do d=q.shift break if d!='*' end puts n.to_s+' '+d.to_s }.join end rubyのバーションは ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin10.0] です。バージョンをあげる事は、できれば避けたいです。 実際には上記プログラムの【puts n.to_s+' '+d.to_s】してる所は、ネットに繋いで云々の時間のかかる処理なのですが、まったくパラレルに行なっている様子が無いので、マルチプロセス化したら早くなるかなと思いました。 子プロセスを生成して親プロセスとはパイプで繋いで、、などとするのかなあと試行錯誤したのですが、どうもうまくできません。 ご指導の程、よろしくお願い申し上げます。

    • ベストアンサー
    • Ruby
  • デュアルコアCPUはマルチスレッドに最適?

    デュアルコアCPUはマルチスレッドに有効と聞きますが、マルチスレッドとはどういうものでしょうか? (1)単純に、3Dゲームをし、ネットをし、同時にエンコードをし、同時に画像処理し・・・っていう作業の「マルチ」ですか? (2)それとも、単独アプリケーション自体にマルチスレッド対応(?)のものがあるのですか? よく、3Dゲームはシングルスレッドのため、デュアルコアCPUの優位性を引き出せないといいますが、上記(1)の場合に当てはまりますか?

  • デュアルコアCPUのマルチスレッド処理について

    デュアルコアCPUにおけるマルチスレッドの処理について質問です。 ハイパースレッドをオフにしデュアルコアの CPU を 4 つ乗せた。 本来であれば、 8 CPU で処理が行なわれるはずであり、別途プロセスが立ち上がっての処理の場合は問題なく処理が行なわれているのだが、マルチスレッドにて処理を行なった場合、各 CPU の片側のみで処理が行なわれてしまう。(タスクマネージャーにて使用率を確認) この現象についてそれぞれのCPUを効率的に使う方法として、何か御座いましたらご教示頂きたく存じます。 宜しく御願い致します。

  • プロセスとスレッドの違いについて(Cプログラミングの観点から)

    プロセスとスレッドの違いがしっくりきません。 <プロセス> (1)プログラムの実行単位。Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される (2)起動や切り替えのオーバーヘッドが大きい <スレッド> (1)同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できる。 (2)マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。 等はwiki等調べて理解しています。 何が疑問なのかと申し上げますと、具体的にプログラミングする際に (1)マルチプロセスとマルチスレッド方式では、ソースにどのような違いが出てくるか (2)マルチプロセスとマルチスレッド方式では実行時間がどれだけ変化するか がわからないのです。お仕事で並列処理等について担当されている方などおられましたら、お手数ですがご教授ください。 なお、わかりやすい書籍、webサイト等ありましたらそれも併せて教えていただけると助かります。よろしくお願いします。ちなみに、環境はWindowsXP,VisualC++ExpressEdition2005を使っていますので、UNIXよりはWindowsかつCで動くプログラム例で教えていただけると大変助かります。しかし、当方Javaも多少であれば組めますのでJavaでも構いません。 何卒、よろしくお願い致します。

  • 非同期処理とマルチスレッドの違い

    非同期処理とマルチスレッドの違いについて学んでいて少々こんがらがっております。 とても大まかに私の理解を説明します。 同期処理:前の処理終わるまで次の処理待たされる。 非同期処理:処理のタイミング自由。 マルチスレッド:疑似的並列処理。 ぼんやりした理解で、もやもやしております。理解したい・・・ 例えなどで分かりやすく違いを教えていただけませんか。専門用語に出来るだけ頼らないような直感的な説明だと大変嬉しゅうございます。 宜しくお願いいたします。

  • マルチスレッド対応ソフト

    デュアルコアを使っている場合、 マルチスレッド対応のソフトを使っていると 2つのコアを使うので 早くなります。 マルチスレッド対応のソフトというのは エンコード系しかないのでしょうか? また、どのソフトがマルチスレッドに対応しているかという判断はどうやってしたらいいんですか? HTは擬似的なデュアルコアですが、 HTに対応していたら、 マルチスレッドに対応、 つまりデュアルコアでも効果が発揮できるのでしょうか? HTとマルチコアだと ソフト側の対応が違いそうな気がしますが。

  • マルチプロセスアプリの運用設計(CPU使用率など)

    デュアルコアのサーバー(Windows2003)で、1つの分散アプリ(ほぼシングルスレッドの作りです)を動かして運用しています。 処理時間の短縮を図るために、各サーバの分散アプリを2に増やして動かそうかと考えています。 現在1つの分散アプリでCPU使用率は50%に張り付くことが多々あります。このためデュアルコアのサーバーで分散アプリを二つ動かすと、CPU使用率が100%で張り付くのではないかと懸念しています。 アプリケーションによってCPU使用率が100%になったときに、OSやミドルウェアなどの動きに影響が出たりするのでしょうか?特に負荷が高いときに生存監視(サーバーや分散アプリの)に反応しなくなると運用上問題となるため懸念しています。 一般的にマルチプロセス(マルチスレッド)のアプリケーションと、OSなどの間でのCPUリソースの割り振りはどのよう設計しているのでしょうか?(OSやミドルウェア用に一コアは残しておくものでしょうか?)

  • マルチプロセスの処理時間

    今、シングルプロセス処理としては開始から終了までA(sec)かかるとします。 これを、一定間隔でプロセス発生させ、マルチプロセスとして処理する場合、 多重実行時の処理速度は、単純に(A / 多重度)に減少すると思って問題ない でしょうか?他のコストは無視できるとします。

専門家に質問してみよう