Jaka jest różnica między rozwidlaniem a spawaniem procesu?


Najlepsza odpowiedź

Tarło to rozpoczęcie kolejnego procesu, a następnie kontynuacja procesu, który spowodował powstanie.

Rozwidlanie to specyficzny mechanizm Unix / Posix, którego można użyć do odrodzenia. Forking tworzy dwie prawie identyczne wersje tego samego procesu. „Prawie”, ponieważ procesy mogą stwierdzić, czy jest to wersja oryginalna, czy rozwidlona. Następnie mogliby po prostu kontynuować, robiąc różne rzeczy w zależności od wiedzy o tym, której instancji są, ale najczęściej jest to natychmiastowe uzyskanie jednego z instancje, aby zastąpić się innym procesem, dając taki sam efekt jak spawnowanie. Ale nie musisz tego robić – logika obu zadań mogłaby być w jednym procesie.

Odpowiedź

Process.fork umożliwia uruchomienie kodu Ruby w innym procesie. Process.spawn umożliwia uruchomienie innego programu w innym procesie. Zasadniczo Process.spawn przypomina użycie Process.fork, a następnie wywołanie exec w procesie rozwidlonym, z tą różnicą, że daje więcej opcji.

a który z nich lepiej uruchamiać inny program w podprocesie?

Jeśli potrzebujesz wstecznej kompatybilności, użyj fork + exec, ponieważ spawn nie jest dostępny w 1.8. W przeciwnym razie użyj spawn, ponieważ uruchomienie innego programu w podprocesie jest dokładnie tym, do czego jest przeznaczony spawn.

O ile rozumiem, Process.fork akceptuje blok kodu, a Process.spawn przyjmuje polecenie systemowe plus kilka innych parametrów.

Dokładnie.

Kiedy należy używać jednego zamiast drugiego?

Użyj rozwidlenia, jeśli chcesz uruchomić dowolny kod ruby ​​w oddzielnym procesie (nie możesz tego zrobić z spawn). Użyj spawn, jeśli chcesz wywołać aplikację w podprocesie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *