Was ist der Unterschied zwischen dem Gabeln und dem Laichen eines Prozesses?


Beste Antwort

Das Laichen startet einen anderen Prozess und setzt dann den Prozess fort, der das Laichen durchgeführt hat.

Forking ist ein spezifischer Unix / Posix-Mechanismus, der zum Laichen verwendet werden kann. Das Gabeln erzeugt zwei nahezu identische Versionen desselben Prozesses. „Fast“, da die Prozesse erkennen können, ob es sich um die Originalversion oder die gegabelte Version handelt. Sie könnten dann einfach weitermachen und verschiedene Dinge tun, je nachdem, um welche Instanz es sich handelt. Am häufigsten erhalten Sie jedoch sofort eine der Instanzen Instanzen, um sich durch einen anderen Prozess zu ersetzen, der den gleichen Effekt wie das Laichen erzeugt. muss dies jedoch nicht tun – die Logik für beide Aufgaben könnte enthalten sein

Antwort

Mit Process.fork können Sie Ruby-Code in einem anderen Prozess ausführen. Mit Process.spawn können Sie ein anderes Programm in einem anderen Prozess ausführen. Grundsätzlich ähnelt Process.spawn der Verwendung von Process.fork und dem anschließenden Aufrufen von exec im gegabelten Prozess, mit der Ausnahme, dass Sie mehr Optionen erhalten.

und welches ist besser, um ein anderes Programm in einem Unterprozess auszuführen?

Wenn Sie Abwärtskompatibilität benötigen, verwenden Sie fork + exec, da Spawn in 1.8 nicht verfügbar ist. Verwenden Sie andernfalls spawn, da das Ausführen eines anderen Programms in einem Unterprozess genau das ist, wofür Spawn gemacht ist.

Soweit ich weiß, akzeptiert Process.fork einen Codeblock und Process.spawn übernimmt einen Systembefehl sowie einige andere Parameter.

Genau.

Wann sollte ich eines anstelle des anderen verwenden?

Verwenden Sie fork, wenn Sie beliebigen Ruby-Code in einem separaten Prozess ausführen müssen (dies ist mit spawn nicht möglich). Verwenden Sie spawn, wenn Sie eine Anwendung in einem Unterprozess aufrufen müssen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.