• 締切済み

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

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

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

すでに書かれていますが、forkは、プロセスを生成するので、マルチプロセス処理になります。 なので、Parallel::ForkManager で(たとえば)10並列にした場合と、perlコマンドをシェルから10個パラレルに起動した場合とでは、ほぼ同じ処理になります。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

>perlでバッチ処理を書いています。ループ処理に時間がかかるのでParallel::ForkManagerというモジュールを使いマルチスレッド化しています。 Parallel::ForkManagerはマルチプロセスを制御するモジュールであってマルチスレッドではないと思いますが。perldoc読んでもプロセスは出てきますがスレッドは出てきませんし。 >ふと思ったのですが、マルチスレッドにせず、単純にこのperlのスクリプトを同じタイミングで複数起動するだけでもマルチスレッド並に速度は向上するのでしょうか? なので、この場合、起動手順が面倒になるだけで速度は向上しないです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

マルチスレッドは同一プロセス内にあるため、 特別な配慮無しに資源(メモリやオブジェクト)を 共有できます。従って、同期を取ることも比較的 簡単にできます。 マルチプロセスではプロセス空間が異なるため、 資源の共有には特別な処置が必要になります。 また、プロセス固有のメモリ領域が必要なので、 マルチスレッドよりシステムの負荷がかかります。 マシンスペックによって、これが重いか、軽いかの 違いがありますので、ハイスペックのものならば 使用上の差異が殆ど感じられないと思います。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>マルチスレッドにせず、単純にこのperlのスクリプトを同じタイミングで複数起動するだけでもマルチスレッド並に速度は向上するのでしょうか? 一般論的には、マルチスレッドのほうがマルチプロセスよりも負荷が軽く、速いといわれていますので、速度が向上することは無いと思います。

関連するQ&A