Perl:Windows版 Fork の機能

2013-10-26 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
2、3、1、1、0、 1、1、1、0、0(38)で、換算ポイント 57pt 。
・-・ - -・

さて、本文。

Perl でパラレル処理は、
Perl:Parallel-ForkManager」ですね。
  ・・・・・
  (日本語による Perl マニュアル?)「perldoc.jp」では、
  「Parallel::ForkManager
    簡単な並列処理によるforkマネージャー
  がある。
  ・・・・・

このページを良く読んでみると、

  CALLBACKS
  プロセスの開始時または終了時のイベントのが呼ばれるときに
   コードの中に回収を定義することができます.

  回収は以下のメソッドで定義することができます:
  ・・・・・
  ・・・・・

そして、
原文(?)を見た。
Parallel::ForkManager - search.cpan.org
  ・・・・・
  CALLBACKS
  You can define callbacks in the code,
   which are called on events like starting a process or upon finish.
  Declare these before the first call to start().

  The callbacks can be defined with the following methods:
  ・・・・・
  ・・・・・

さらに、興味深い事が書いてあった。
  ・・・・・
  Data structure retrieval
  In this simple example, each child sends back a string reference.
  ・・・・・

なに?
戻り値を取得できる?

子プロセスから文字列を親に渡せる!!!
但し、アドレス渡しですが。

試してみました。
出来ますね。(処理結果の文字列を渡せた)

よくよく調べてみると、

  ・・・・・
  Each child process may optionally send 1 data structure
   back to the parent.
  By data structure, we mean a reference to a string, hash or array.
  The contents of the data structure are written out
   to temporary files on disc using the Storable modules' store() method.
  The reference is then retrieved from within the code you send
   to the run_on_finish callback.

  The data structure can be any scalar perl data structure
   which makes sense: string, numeric value or a reference to an array,
   hash or object.
  ・・・・・

文字列に限らない。数値データでもOKダ。
これは、素晴らしい。


しか~し。制限はある。

  There are 2 steps involved in retrieving data structures:

  1) A reference to the data structure the child wishes to send back
   to the parent is provided as the second argument to the finish() call.
  It is up to the child to decide whether or not
   to send anything back to the parent.

  2) The data structure reference is retrieved using the callback
   provided in the run_on_finish() method.

  Keep in mind that data structure retrieval is not the same as
   returning a data structure from a method call.
  That is not what actually occurs.
  The data structure referenced in a given child process is serialized
   and written out to a file by Storable.
  The file is subsequently read back into memory and
   a new data structure belonging to the parent process is created.
  Please consider the performance penality it can imply,
   so try to keep the returned structure small.

短いものでないと問題が起こりうる。



更には、

perlfork - search.cpan.org
  ・・・・・
  Perl provides a fork() keyword that corresponds to the Unix system
   call of the same name.
  On most Unix-like platforms where the fork() system call is available,
   Perl's fork() simply calls it.

  On some platforms such as Windows where
   the fork() system call is not available,
  Perl can be built to emulate fork() at the interpreter level.
  While the emulation is designed to be as compatible as possible
   with the real fork() at the level of the Perl program,
  there are certain important differences that stem from the fact that
   all the pseudo child "processes" created this way live in the
   same real process as far as the operating system is concerned.

  This document provides a general overview of the capabilities and
   limitations of the fork() emulation.
  Note that the issues discussed here are not applicable to platforms
   where a real fork() is available and
   Perl has been configured to use it.

OSとしての MS の Windows には、Linux と違って、Fork の機能が無い。
なので、ActivePerl等(Windows版 Perl )では、
Fork の機能をエミュレートしてくれている。
(有り難い事です)

なので、制約が有る。

  ・・・・・
  Resource limits

  In the eyes of the operating system,
   pseudo-processes created via the fork() emulation are
   simply threads in the same process.
  This means that any process-level limits imposed by
   the operating system apply to all pseudo-processes taken together.
  This includes any limits imposed by the operating system on the
   number of open file, directory and socket handles,
   limits on disk space usage, limits on memory size,
   limits on CPU utilization etc.

つまり、ほんもののプロセスじゃなくて、
親プロセスの中のスレッドとして動く。
だから、もろもろのリソースについての制限が付く。
(疑似)子プロセスの全てをひとまとめにして、
オープンファイル数、メモリサイズ、等々に制限が付く。


でも、まあ、
シングルで動いているものをパラレルにするなら大丈夫ですね。


これは、本格的に使わせて頂こう!



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


131020,21
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク