C/C++ Thread



  • Hi
    Ich hab bei Wikipedia gelesen, dass ein Thread ein Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms ist.
    Was genau ist der Unterschied zwischen einen Thread und eine Funktion und wann ist es hilfreich einen Thread zu programieren? 😕



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Einfach weiterlesen ... auch "Siehe auch" oder Links und Quellen mit einbeziehen.



  • Wenn du in deiner main-Funktion eine weitere Funktion aufrufst, ist das ein sequentieller Ablauf. Diese Funktion muss erst beendet werden, bevor es in der main weitergeht. Ein Thread läuft aber parallel. Das heißt im Klartext, dass mehrere Funktionen gleichzeitig laufen (bzw. sich in sehr kurzen Intervallen abwechseln). Man macht sowas typischerweise, um die Laufzeit zu verbessern (mehrere Threads werden auf mehrere CPU-Kerne verteilt), oder auch um dem Benutzer während einer rechenintensiven Routine die gleichzeitige Benutzung der GUI zu ermöglichen.



  • Okay danke. Ich hab es jetzt verstanden. 😃



  • Wenn du kochst, und deine Freundin gleichzeitig Fenster putzt, dann sind das zwei Threads, die von zwei Cores ausgeführt werden.
    Wenn du alleine gleichzeitig kochst UND Fenster putzt (mal da nen Handgriff, mal dort nen Handgriff), dann sind das zwei Threads die auf einem Core ausgeführt werden.

    🤡



  • Wichtig ist auch der Unterschied zwischen Prozess (eigener Adressraum) und Thread (gleicher Adressraum).



  • Erhard Henkes schrieb:

    Wichtig ist auch der Unterschied zwischen Prozess (eigener Adressraum) und Thread (gleicher Adressraum).

    Bitte mit dem Kochen-und-Putzen-Beispiel erklären. Sonst versteht das doch kein Mensch. 😉



  • Bei Threads verhält sich das so: Du kochst und deine Freundin putzt die Wohnung und ihr könnt euch unterhalten.
    Bei Prozessen ist es so, dass du einfach die Küchentüre abschliesst, damit sie dir beim Kochen nicht auf den Sack geht.



  • Tim schrieb:

    Bei Threads verhält sich das so: Du kochst und deine Freundin putzt die Wohnung und ihr könnt euch unterhalten.
    Bei Prozessen ist es so, dass du einfach die Küchentüre abschliesst, damit sie dir beim Kochen nicht auf den Sack geht.

    Genau 😃

    Wobei es dann immer noch das Telefon (IPC) gibt, über das du sie trotzdem anrufen kannst. Ist aber umständlicher und langsamer.

    Durchreiche Küche <-> Wohnzimmer gibt's auch (shared memory), muss man aber vorsichtig sein damit.



  • Und wenn du deine Freundin zum Nachbarn ins gegenüberliegende Haus Putzen schickst ist das ein Remote Thread. Telefon funktioniert noch, aber das mit der Durchreiche geht nicht mehr.



  • Was ein geiler Thread, mehr davon. 😃 👍



  • Erhard Henkes schrieb:

    Wichtig ist auch der Unterschied zwischen Prozess (eigener Adressraum) und Thread (gleicher Adressraum).

    wobei solche definitionen immer von dem jeweiligen OS abhängen. allgemein gesehen werden begriffe wie 'prozess', 'task' und 'thread' synonym gebraucht, was verwirrung stiften kann. musste also immer dazusagen welches OS gemeint ist.
    🙂



  • +fricky schrieb:

    Erhard Henkes schrieb:

    Wichtig ist auch der Unterschied zwischen Prozess (eigener Adressraum) und Thread (gleicher Adressraum).

    wobei solche definitionen immer von dem jeweiligen OS abhängen. allgemein gesehen werden begriffe wie 'prozess', 'task' und 'thread' synonym gebraucht, was verwirrung stiften kann. musste also immer dazusagen welches OS gemeint ist.
    🙂

    richtige software wird immer für windows entwickelt



  • +fricky schrieb:

    Erhard Henkes schrieb:

    Wichtig ist auch der Unterschied zwischen Prozess (eigener Adressraum) und Thread (gleicher Adressraum).

    wobei solche definitionen immer von dem jeweiligen OS abhängen. allgemein gesehen werden begriffe wie 'prozess', 'task' und 'thread' synonym gebraucht, was verwirrung stiften kann. musste also immer dazusagen welches OS gemeint ist.
    🙂

    die windows begriffe haben sich ziemlich gut durchgesetzt.
    gibt nur noch ein paar wenige realitäts-verweigerer, die gern falsch verstanden werden, gern sudern, gern verwirrung stiften etc.



  • hustbaer schrieb:

    die windows begriffe haben sich ziemlich gut durchgesetzt.

    bei windows-proggern sicherlich... bei wem noch?
    🙂



  • +fricky schrieb:

    hustbaer schrieb:

    die windows begriffe haben sich ziemlich gut durchgesetzt.

    bei windows-proggern sicherlich... bei wem noch?
    🙂

    bei den meisten die plattformübergreifend programmieren, nicht fricky heissen, und auch nicht total verbohrt sind.



  • hustbaer schrieb:

    bei den meisten die plattformübergreifend programmieren...

    und diese 'meisten' kennst du natürlich persönlich, oder existieren sie vielleicht doch nur in der phantasie unseres hustinetten-bärchens? die meisten programmierenden leute, die ich so kenne, verwenden die begriffe 'task' (sehr häufig) bzw. 'prozess' (seltener) als bezeichnung für parallel ausführbare einheiten. 'thread' (ganz ganz selten) ist zwar auch nicht unbekannt, aber das sagt kaum einer. es liegt nun mal daran, dass jeder OS-hersteller in seinen manuals eine abweichende terminologie benutzt, die von den anwendern aufgenommen wird. ach ja, plattformübergreifend in dem sinne, dass das darunterliegende OS getauscht werden kann, programmieren einige davon auch.
    🙂



  • "task" mag im win-Sprech die Bedeutung von "kernel process" haben, im allgemeinen Sprachgebrauch meint man damit aber seit jeher (und wohl schon bevor es win überhaupt gab) entweder einen "Prozeß" oder einen Oberbegriff für "Thread und Prozeß".



  • u_ser-l schrieb:

    im allgemeinen Sprachgebrauch meint man damit aber seit jeher (und wohl schon bevor es win überhaupt gab) entweder einen "Prozeß" oder einen Oberbegriff für "Thread und Prozeß".

    so ähnliche definitionen sind mir auch geläufig. das wort 'multitasking' z.b. bedeutet nur, dass ein OS, programm o.ä. nebenläufigkeit unterstützt.

    Damals hat sich der Begriff Task für eine Aufgabe aus Sicht des Betriebssystems eingebürgert, das ist synonym zu dem hier beschriebenem Thread. Der Begriff Task (deutsch: Aufgabe) wird in der Softwarearchitektur aber auch unscharf allgemein für zusammenhängende Aufgaben benutzt, insbesondere auch synonym für Prozess eingesetzt.

    --> http://de.wikipedia.org/wiki/Thread_(Informatik)
    🙂



  • +fricky schrieb:

    hustbaer schrieb:

    bei den meisten die plattformübergreifend programmieren...

    und diese 'meisten' kennst du natürlich persönlich, oder existieren sie vielleicht doch nur in der phantasie unseres hustinetten-bärchens? die meisten programmierenden leute, die ich so kenne, verwenden die begriffe 'task' (sehr häufig) bzw. 'prozess' (seltener) als bezeichnung für parallel ausführbare einheiten. 'thread' (ganz ganz selten) ist zwar auch nicht unbekannt, aber das sagt kaum einer. es liegt nun mal daran, dass jeder OS-hersteller in seinen manuals eine abweichende terminologie benutzt, die von den anwendern aufgenommen wird. ach ja, plattformübergreifend in dem sinne, dass das darunterliegende OS getauscht werden kann, programmieren einige davon auch.
    🙂

    Zeig mir bitte eine multi-plattform Library die den Begriff "Process" oder "Task" für das verwendet, was Windows "Thread" nennt.

    Ansonsten sieh dir bitte das Threading proposal für den neuen C++ Standard an, Boost.Thread, Qt, Java, ZThreads, PTHREADS etc.
    Dort werden die Begriffe "Thread" und "Process" mit genau der Bedeutung verwendet, die sie auch in Windows haben.
    (Bzw. wird in manchen der Begriff "Process" nicht vorkommen, aber der Begriff "Thread" kommt vor, und bedeutet immer dasselbe.)

    Hör bitte endlich auf so selbstverliebt Müll zu posten.

    Und steck dir deine Smileys dorthin, wo die Sonne nicht scheint.

    p.S.: dass der Begriff Begriff "Task" nicht genau definiert ist, ist mir bekannt. Allerdings war davon nie die Rede, bevor du hier zur Rettung der freien Welt darauf hingeweisen hast, dass diese Begriffe ja ach-so-verwirrend sein können.
    In der daraus entstendenen Diskussion jetzt auf genau diesem Begriff "Task" rumzureiten, halte ich für etwas sehr daneben.


Anmelden zum Antworten