Vad är skillnaden mellan att gaffla och leka en process?


Bästa svaret

Lekning är att starta en annan process och sedan fortsätta med processen som gjorde gytningen.

Forking är en specifik Unix / Posix-mekanism som kan användas för lek. Forking producerar två nästan identiska versioner av samma process. ”Nästan” eftersom processerna kan avgöra om de är original- eller gaffelversionen. De kunde sedan bara fortsätta och göra olika saker enligt den kunskap om vilken instans de är, men det vanligaste är att omedelbart få en av de fall att ersätta sig själv med en annan process, vilket ger samma effekt som lek. Men du behöver inte för att göra det – logiken för båda uppgifterna kan finnas i den ena processen.

Svar

Process.fork låter dig köra rubinkod i en annan process. Process.spawn låter dig köra ett annat program i en annan process. I grund och botten är Process.spawn som att använda Process.fork och sedan ringa exec i den gafflade processen, förutom att det ger dig fler alternativ.

och vilken är bättre att köra ett annat program i en delprocess?

Om du behöver bakåtkompatibilitet, använd gaffel + exec eftersom spawn inte finns i 1.8. Annars använder du spawn eftersom det är exakt vad som är spawn för att köra ett annat program i en underprocess.

Såvitt jag förstår accepterar Process.fork kodblock och Process.spawn tar ett systemkommando plus några andra parametrar.

Exakt.

När ska jag använda en i stället för den andra?

Använd gaffel om du behöver köra godtycklig rubinkod i en separat process (du kan inte göra det med spawn). Använd spawn om du behöver åberopa en applikation i ett underprocess.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *