Care este diferența dintre bifurcare și reproducere a unui proces?


Cel mai bun răspuns

Spawning începe un alt proces și apoi continuă cu procesul care a generat reproducerea.

Forkingul este un mecanism specific Unix / Posix care poate fi utilizat pentru reproducere. Forkingul produce două versiuni aproape identice ale aceluiași proces. „Aproape”, deoarece procesele pot spune dacă sunt versiunea originală sau versiunea bifurcată. Ei ar putea să continue, făcând lucruri diferite în funcție de cunoștințele despre care sunt instanța, dar cel mai obișnuit lucru de făcut este să obțineți imediat unul dintre instanțe pentru a se înlocui cu un proces diferit, producând același efect ca reproducerea. Dar nu aveți să faceți acest lucru – logica pentru ambele activități ar putea fi conținută într-un singur proces.

Răspuns

Process.fork vă permite să rulați codul rubin într-un alt proces. Process.spawn vă permite să rulați un alt program într-un alt proces. Practic Process.spawn este ca și cum ai folosi Process.fork și apoi ai apela exec în procesul cu furcă, cu excepția faptului că îți oferă mai multe opțiuni.

și care este cel mai bun pentru a rula un alt program într-un subproces?

Dacă aveți nevoie de compatibilitate inversă, utilizați fork + exec deoarece spawn nu este disponibil în 1.8. În caz contrar, utilizați spawn, deoarece rularea unui alt program într-un subproces este exact pentru ce este făcut spawn.

Din câte înțeleg Process.fork acceptă bloc de cod și Process.spawn preia o comandă de sistem plus câțiva alți parametri.

Exact.

Când ar trebui să folosesc unul în locul celuilalt?

Utilizați furculița dacă trebuie să rulați un cod rubin arbitrar într-un proces separat (nu puteți face asta cu spawn). Utilizați spawn dacă trebuie să invocați o aplicație într-un subproces.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *