4

ブロックまたは Proc で定義されたコードを別のプロセスで生成するソリューションを探しています。何かのようなもの

p = Proc.new do
  File.open('newproc.log', 'w') {
    |fw|
    10.times do
      fw.puts Time.now
      sleep 1
    end
  }
end

# spawn p in a separate process here

# original code continues

プロセスの分岐、スレッド化、外部ファイルへの保存はありません。スタンドアロン プロセスでブロックを実行するだけです。

何か案が ?

更新: 呼び出しプロセスで定義されたものに依存しないブロックを追加する必要があります。

4

1 に答える 1

3

Unix ベースのシステムでfork(3)は、新しいプロセスを作成する唯一の方法です。説明していることを達成するには、フォークする能力が必要です。

親プロセスが「太く」、多くのメモリを占有するために fork を回避しようとしている場合は、 Copy-on-Writeを実装するRuby のバージョン ( Ruby 2.0など) を使用することで、メモリの重複を回避できる場合があります。. また、スレッドは個別のプロセスよりもはるかに少ないメモリを使用するため、スレッド化は検討する価値があります。

編集

を使用したソリューションは次のforkようになります。

p = Proc.new do
  File.open('newproc.log', 'w') {
    |fw|
    10.times do
      fw.puts Time.now
      sleep 1
    end
  }
end

# spawn p in a separate process here
fork { p.call }

# original code continues
于 2013-04-02T07:25:08.303 に答える