Beste antwoord
Spawning is het starten van een ander proces en vervolgens doorgaan met het proces dat het spawning heeft gedaan.
Forking is een specifiek Unix / Posix-mechanisme dat kan worden gebruikt voor spawning. Forking produceert twee bijna identieke versies van hetzelfde proces. “Bijna” omdat de processen kunnen zien of ze de originele of de gevorkte versie zijn. Ze zouden dan gewoon verder kunnen gaan en verschillende dingen doen op basis van de kennis van de instantie die ze zijn, maar het meest gebruikelijke is om onmiddellijk een van de gevallen om zichzelf te vervangen door een ander proces, met hetzelfde effect als bij het uitzetten. Maar u hoeft dat niet te doen – de logica voor beide taken zou kunnen worden ingesloten in het ene proces.
Antwoord
Process.fork stelt je in staat om ruby-code in een ander proces uit te voeren. Met Process.spawn kunt u een ander programma in een ander proces uitvoeren. In wezen is Process.spawn hetzelfde als het gebruik van Process.fork en vervolgens exec aanroepen in het gevorkte proces, behalve dat het je meer opties geeft.
en welk programma is beter om een ander programma in een subproces te draaien?
Als je achterwaartse compatibiliteit nodig hebt, gebruik dan fork + exec, aangezien spawn niet beschikbaar is in 1.8. Gebruik anders spawn omdat het draaien van een ander programma in een subproces precies is waarvoor spawn is gemaakt.
Voor zover ik begrijp, accepteert Process.fork blok code en Process.spawn neemt een systeemcommando plus enkele andere parameters.
Precies.
Wanneer moet ik de ene in plaats van de andere gebruiken?
Gebruik fork als je willekeurige ruby-code in een apart proces moet draaien (je kunt dat niet doen met spawn). Gebruik spawn als je een applicatie in een subproces moet aanroepen.