Einige Fragen zu Threads und Prozessen

Einige Fragen zu Threads und Prozessen

Diese Fragen wurden mir im Vorstellungsgespräch (C++-Vorstellungsgespräch) gestellt. Ich bin mir bei den Antworten nicht sicher und würde gern mehr darüber erfahren.

  1. Kann ein Thread einen anderen Thread erstellen?
  2. Kann ein Prozess einen anderen Prozess erstellen?
  3. Kann ein Thread einen Prozess erstellen?
  4. Kann der Prozess einen Thread erstellen?

Antwort1

  1. Ja, ein Thread kann einen anderen Thread erstellen. Unter UNIX geschieht dies (auf niedriger Ebene) durch den clone()Befehl und auf höherer Ebene, in der C-Codierung, durch die pthreadBibliothek.

  2. Ja, ein Prozess kann einen anderen Prozess starten. Das passiert ständig. Der häufigste Prozesstyp -> Prozess ist durch fork().

  3. Da bin ich mir nicht sicher. An dieser Stelle möchte ich erwähnen, dass es zwei Haupttypen von Threads gibt: Threads auf Kernelebene und Threads auf Benutzerebene. Threads auf Kernelebene (im Allgemeinen) sind an Hauptprozesse gebunden, während Threads auf Benutzerebene von diesen Prozessen (also von Threads auf Kernelebene) erzeugt werden.Es gibt AusnahmenVielleicht kann jemand eine bessere Antwort auf Thread -> Prozess geben.

  4. Ja. Siehe den Kommentar in 3.

Antwort2

Jeder ausgeführte Code kann alles tun.

Allerdings sind Prozesse kein Code – Threads sind die Dinge, die tatsächlich ausgeführt werden, und Prozesse sind ihre umschließenden Umgebungen. Daher sind (1) und (3) wahr, der Rest falsch.

Antwort3

Ja zu allem.

Es könnte Ihnen helfen zu verstehen, dass Prozesse in Windows nicht wirklich „ausgeführt“ werden. Es werden Threads ausgeführt. Jeder Prozess hat mindestens einen Thread. Die wirklichen Fragen sind also:

  • Kann die Ausführung von Code einen weiteren Thread erstellen? Ja.

Unter Windows geschieht dies mit der CreateThread-API oder einem ihrer Verwandten. Die lange Version wäre: „Kann Code, der im Kontext eines Threads ausgeführt wird, einen anderen Thread erstellen?“ Sicher, aber daalleCode wird im Kontext eines Threads ausgeführt, die zusätzliche Ausdrucksweise ist nicht erforderlich. CreateThread verwendet als Argument die Adresse der Funktion, die zur Top-Level-Funktion für den neuen Thread wird – im Wesentlichen die „Hauptfunktion“ des neuen Threads.

  • Kann die Ausführung von Code einen anderen Prozess erstellen? Ja.

Ähnlich wie zuvor: Wenn Sie im Kontext eines Threads arbeiten, arbeiten Sie auch im Kontext des Prozesses, dem der Thread gehört. Es gibt also eine CreateProcess-API, mit der Sie einen weiteren Prozess erstellen können.

Außerdem erstellen Sie automatisch und ohne weiteren Aufwand einen Thread in Ihrem neuen Prozess, da (da Prozesse nicht ausgeführt werden) ein Prozess ohne Thread nichts tun kann. Dieser erste Thread im neuen Prozess startet die Ausführung der „Hauptfunktion“ des Programms – main() oder WinMain() oder was auch immer.

verwandte Informationen