Ein Prozess ist eine isolierte Ausführungseinheit mit eigenem virtuellem Adressraum; ein Thread ist eine Scheduling-Einheit innerhalb eines Prozesses, die sich diesen Adressraum mit seinen Geschwistern teilt. Threads sind billig zu erzeugen und können Daten direkt teilen, und genau deshalb brauchen sie Locks. Prozesse kosten mehr und brauchen explizite Interprozesskommunikation, aber ein Crash oder Speicherfehler in einem kann keinen anderen beschädigen.
Warum Interviewer das fragen
Das ist die Grundlage für jedes Gespräch über Nebenläufigkeit, und Interviewer nutzen es, um zu sehen, wie tief das mentale Modell geht. Sie wollen den Punkt zur Speicherisolation, den Kostenunterschied und die Konsequenz: geteilter Speicher heißt geteilter veränderlicher State heißt Synchronisation. Zusatzpunkte, wenn du es damit verbindest, wie deine Runtime Arbeit tatsächlich schedulet, denn das entscheidet, ob Threads dir überhaupt helfen.
So baust du deine Antwort auf
- Häng dich am Adressraum auf: isoliert gegen geteilt.
- Vergleich die Kosten fürs Erzeugen und für den Kontextwechsel.
- Zieh die Konsequenz für Synchronisation und Crash-Isolation.
- Verbind es damit, wie deine Sprach-Runtime Arbeit schedulet.
Beispielantwort
Der Unterschied, der zählt, ist Speicher. Jeder Prozess bekommt seinen eigenen Adressraum, einer der crasht oder über einen Pointer hinausschreibt kann die anderen also nicht mitreißen, aber sie können nur über Pipes, Sockets oder ein bewusst eingerichtetes Shared-Memory-Segment reden. Threads leben in einem Prozess und teilen sich den Heap, Daten zwischen ihnen weiterzugeben ist also nur ein Pointer, was schnell ist und genau der Grund, warum du Locks brauchst. Die Erzeugungskosten folgen derselben Linie: einen Thread zu starten ist billig, einen Prozess zu forken nicht. In der Praxis lasse ich die Runtime meine Strategie bestimmen. In Python geht CPU-lastige Arbeit auf mehrere Prozesse, weil das Global Interpreter Lock Threads daran hindert, Bytecode parallel auszuführen, während IO-lastige Arbeit auf Threads oder async gut aufgehoben ist. In Go oder Java würde ich zuerst zu Threads oder Goroutines greifen. Das umgekehrt zu machen ist der Weg zu acht Worker-Threads, die alle hinter einem Interpreter anstehen, und niemand versteht, warum die Maschine idle ist.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Was passiert bei einem Kontextwechsel eigentlich?
- Wann würdest du komplett auf async IO statt auf Threads setzen?
- Wie vermeidet ein Thread Pool die Kosten, die du beschrieben hast?
Weitere Fragen für Softwareentwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen