アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

ご教示くださいませ。

A 回答 (4件)

すでに書かれていますが、forkは、プロセスを生成するので、マルチプロセス処理になります。



なので、Parallel::ForkManager で(たとえば)10並列にした場合と、perlコマンドをシェルから10個パラレルに起動した場合とでは、ほぼ同じ処理になります。
    • good
    • 0

>perlでバッチ処理を書いています。

ループ処理に時間がかかるのでParallel::ForkManagerというモジュールを使いマルチスレッド化しています。

Parallel::ForkManagerはマルチプロセスを制御するモジュールであってマルチスレッドではないと思いますが。perldoc読んでもプロセスは出てきますがスレッドは出てきませんし。

>ふと思ったのですが、マルチスレッドにせず、単純にこのperlのスクリプトを同じタイミングで複数起動するだけでもマルチスレッド並に速度は向上するのでしょうか?

なので、この場合、起動手順が面倒になるだけで速度は向上しないです。
    • good
    • 0

マルチスレッドは同一プロセス内にあるため、


特別な配慮無しに資源(メモリやオブジェクト)を
共有できます。従って、同期を取ることも比較的
簡単にできます。
マルチプロセスではプロセス空間が異なるため、
資源の共有には特別な処置が必要になります。
また、プロセス固有のメモリ領域が必要なので、
マルチスレッドよりシステムの負荷がかかります。

マシンスペックによって、これが重いか、軽いかの
違いがありますので、ハイスペックのものならば
使用上の差異が殆ど感じられないと思います。
    • good
    • 0

>>マルチスレッドにせず、単純にこのperlのスクリプトを同じタイミングで複数起動するだけでもマルチスレッド並に速度は向上するのでしょうか?



一般論的には、マルチスレッドのほうがマルチプロセスよりも負荷が軽く、速いといわれていますので、速度が向上することは無いと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!