T
Das ist in den aller wenigsten Fällen Geschmackssache.
Fork dient meistens zum Aufruf externer Programme. Die Funktion "system(const char*)" verwendet fork und exec um ein Programm zu starten. Es wird aber auch benutzt, um Dinge parallel auszuführen. Da hat es einen ähnlichen Einsatzzweck, wie Threads.
Der wesentliche Unterschied ist, daß ein Prozess im eigenen Speicherraum läuft. Das hat, wie vieles im Leben Vor- und Nachteile. Vorteil ist, daß sich die Prozesse nicht gegenseitig die Daten überschreiben können und wenn ein Prozess abstürzt, läuft der andere weiter. Nachteil ist, daß die Prozesse untereinander nicht so leicht Daten austauschen können. Dafür sind IPC-Techniken (inter-process-communication) notwendig.
Threads laufen im gleichen Speicherbereich. Das bedeutet, daß Threads die Variablenwerte teilen. Setzt ein Thread einen Variable auf einen Wert, ist dieser für andere auch sichtbar. Das ist auf der einen Seite praktisch, auf der anderen Seite aber gefährlich. Der Zugriff auf gemeinsame Variablen muß über Mutexe serialisiert werden. Sonst gibt es Datensalat, wobei Salat für den Menschen gesund ist, bei einem Prozess aber schnell zum Tod führt. Und die Threads teilen sich diesen Tod, d.h. greift ein Thread daneben und verursacht eine Speicherschutzverletzung, werden alle Threads des Prozesses beendet.
Es ist offensichtlich, daß die Programmierung mit Threads sehr viel mehr Aufmerksamkeit und Erfahrung erfordert. Alles, was ich in einem Prozess, der mehrere Threads hat, so treibe, muß ich darauf prüfen, ob gleichzeitige Zugriffe problematisch werden können.
Threads in einem Prozess können die Performance, insbesondere in der heutigen Zeit mit Prozessoren mit mehreren Cores, erheblich verbessern, da mehrere Aufgabe eines einzelnen Programms auf mehrere Cores verteilt werden können. Im Serverbereich werden Threads häufig dazu eingesetzt, mehrere Clients zu bedienen.
Tntnet