2012-03-30 8 views
4

Die Tutorials, Handbücher und andere Ressourcen, die ich über fork() lese, enthalten normalerweise nur Beispiele, die mit Threads viel besser gelöst werden könnten. Sie kommunizieren nur, machen einige grundlegende Aufgaben und kommunizieren erneut, um die Ergebnisse zu teilen oder anzuzeigen. Ich habe das Gefühl, dass, solange Sie nicht ein fremdes Programm starten (indem Sie den Vater fortführen und das Kind dieses ausländische Programm startet), sind Fäden immer einfacher zu handhaben, flexibler und sicherer als Gabeln.Nützlichkeit von fork() außer Ausführen von fremden Programmen

Gibt es noch ein anderes Anwendungsgebiet, wenn ein fork() der Verwendung von Threads überlegen wäre? Bis auf einen Virus.

+1

Auf einigen/vielen Betriebssystemen sind Prozesse _cheaper_ als Threads. – ildjarn

+0

Tatsächlich sind Threads oft viel komplizierter zu verwenden als Prozesse für Tasks, die nicht viel von den zu teilenden Daten benötigen. –

+0

@Matteo: Es kommt darauf an. Ich finde zum Beispiel, dass die Threads von Qt um ein Vielfaches einfacher zu benutzen sind als ein Programm, um mit Kopien von sich selbst zu kommunizieren. – vsz

Antwort

3

Sie können fork() als eine einfache Möglichkeit verwenden, um einen Snapshot aus einer Anwendung zu generieren, ohne die ursprüngliche Anwendung zu stoppen.

Da das Betriebssystem den virtuellen Speicher des Prozesses als Kopie beim Schreiben abbildet, zahlen Sie keine Kosten außer für Daten, die sich geändert haben (plus Betriebssystem-Overhead).

Bearbeiten: Weitere Antworten von Kommentaren für die späteren Zuschauer hinzugefügt.

Ein typisches Beispiel wäre ein Webserver (z. B. Apache). Wenn ein Prozess abstürzt, ist es einfach, sauber neu zu starten - nicht so mit Threads. Die Verwendung separater Prozesse begrenzt den Schaden, den Sie durch einen einzigen Prozessabsturz bekommen können. - Jerry Coffin

fork() älter als die verschiedenen Thread-Mechanismen um mindestens ein Jahrzehnt. Also, wenn Sie Portabilität zu V7 UNIX benötigen, ist fork() eine viel bessere Wahl. - Robᵩ

fork() kann verwendet werden, um Ihren Prozess zu dämonisieren, während der Monitorprozess am Leben erhalten bleibt. - Mark B

+0

Welchen Nutzen hat dies neben dem Debuggen? Eine sehr langwierige Selbstdiagnosefunktion, die viel Zeit in Anspruch nimmt und das Programm nicht hängen lassen sollte? – vsz

+0

@ Vsz, Snapshots sind nicht nur zum Debuggen. Ich benutze sie die ganze Zeit, damit ich die Ergebnisse eines 9-stündigen Prozesses zwischenspeichern kann. – MSN

Verwandte Themen