kostenloser Webspace werbefrei: lima-city


Java Threads Frage

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Hallo Com,
    Ich habe heute was von Threads in Java gelesen. Ich programmiere noch nicht lange bzw. eigentlich nur wenns in der Schule verlangt wird. Meine Frage ist nun wofür diese Threads sind?
    Also wenn ich nun 8 Threads erstellen würde, würde bei einem 8core Prozessor wie der Fx8350 von AMD dann in jedem Core ein Thread abgefertigt?
    Sprich Multithreading, habe ich mal was von gelesen... .

    Also man merkt schon mich interessiert der Teil, wie man 1,2,4 oder auch 8 Cores nützt.
    Denn wenn man ein Programm anfertigt macht man es, denke ich mal, lieber von Anfang an richtig bzw. eben so das die CPU auch ausgenutzt werden kann. Was die Performance von dem Programm ja deutlich verbessern sollte.


    Bitte antwortet nicht mit irgendwelchen Zitaten aus Wikipedia oder sonstwo, sondern nur wenn ihr selbst versteht von was ihr redet. Ich würde es nämlich ganz gerne auch verstehen:biggrin:.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Moin,
    also, für die Frage, muss man sich glaub ich erstmal anschauen: Was zum Teufel ist ein Thread?
    Um das so einfach wie möglich zu beschreiben, möchte ich einen Vergleich ziehen: Eine Software ist wie eine Firma. In einer Firma hast du mindestens den Firmengründer. Der Gründer ist das Hauptprogramm. Um nun nicht alles alleine machen zu müssen, können entweder andere Firmen gegründet werden (neue Prozesse erzeugt werden) und mit denen zusammen gearbeitet werden, oder aber Angestellte eingestellt werden (Threads erstellt werden). Die Angestellten erledigen dann Arbeit PARALELL zueinander. Dadurch kann die Firma einige Dinge viiel schneller bearbeiten, weil jetzt ja paralell gearbeitet wird. Auch ist es auf einmal Sinnvoll zu sagen, dass Peter Dämlich und Dieter Dicklich, zwei der Threads, unterschiedliche und logisch getrennte Aufgaben machen.

    Nun, jetzt gibt es, muss man dazu sagen, zwei Arten von Threads, also zwei Arten, wie der Firmengründer mit seinen Angestellten umgehen kann. Zuerstmal gibt es Userthreads. Bei der User variante Arbeitet der Chef, also Firmengründer, nicht richtig, sondern er überwacht alles. Er sagt genau wer was wann zu tun hat, und verteilt die Ressourcen in der Firma (Peter Locher, Dieter Stuhl!).
    Die andere Variante sind Kernelthreads. Bei Kernelthreads arbeitet der Chef mit, und die Mitarbeiter kriegen die Ressourcen vom Betriebssystem zugeteilt. Das ist jetzt schwer mit der Firma zu erklären. In dem Fall, technisch gesprochen, verwaltet das Betriebssytem wer wann welche Ressourcen kriegt.

    Nun, ich spreche von "Ressourcen", was ist das? Ein Computer hat als Hauptressource die CPU. Diese wird vom Betriebssystem verwaltet. Jedes Programm darf mal ein bisschen rechnen, und muss dann warten, bis wieder jemand darf. Das kannst du dir so vorstellen, als wenn sich alle Firmen die aktiv sind (alle Prozesse auf deinem Computer), einen Computer teilen müssen. Jede Firma darf da mal ran, wenn das Betriebssytem, der Computerverwalter, sagt, du darfst. Du musst aber aufhören, sobald er dich da weg holt, auch mitten im Satz. Dafür wird gespeichert, was du gemacht hast, damit du beim nächsten mal da weiter machen kannst. Während ein neuer Prozess, eine neue Firma, bedeutet, dass die ein neuer Platz in der Warteschlange besetzt wird, bedeutet ein neuer Thread, dass in der kurzen Zeit, wo deine Firma an den Computer darf, alle mal ran wollen. Bei Userthreads sagt der Chef, wann wer ran darf, bei Kernelthreads sagt der Computerbesitzer, wer wann ran darf.
    Stehen jetzt mehrere Computer (also mehrere CPU-Kerne) zur Verfügung, dann können sich einige deiner Angestellten (Threads) auch in die zweite, dritte, vierte (wieviele Kerne auch immer da sind) Schlange anstellen. So hat deine eine Firma (Prozess) Angestellte in jeder Schlange, Dadurch kann deine Firma auch viel effizienter arbeiten. Mehrere Prozesse hätten zwar auch dann Platz in mehreren Schlagen, aber diese haben unterschiedlche Logins für die Computer (jede Firma hat genau einen Login), sodass Daten erst per Post hinundher geschickt werden müssten, was langsam ist. Da jeder Angestellte mit dem gleichen Login reingeht, sind immer alle Daten gleich, und sie haben Zugriff auf alles Firmenrelevante (auf allen Speicher im Prozess).
    Das birgt jetzt aber eine Gefahr: Peter Dämlich und Dieter Dicklich könnten gleichzeitig, das gleiche Dokument bearbeiten, und abspeichern. Was steht dann im Dokument? Nur muggelfug! Das nennt man dann nicht meht Threadsave, wenn Threads gleichzeitig das gleiche bearbeiten können. (Mögliche Lösungen sind zb ne Mutex).

    Java nutzt übrigens ein Verfahren, dass nennt sich "Green Threads" (variiert auch von Implementierung zu Implementierung). Dabei werden in Wirklichkeit Kernelthreads genutzt, die aber als Userthreads gehandhabt werden. Wie genau das funktioniert weiß ich nicht, wollt ich aber erwähnt haben. Übrigens musst du bei Userthreads nicht selbst schreiben, wer wann was macht, die Verwaltung übernimmt die JVM oder entsprechende Umgebung schon für dich. Es ist aber wichtig zu wissen, dass die Umgebung das macht.

    Ich hoffe der Vergleich hilft das zu verstehen, damit sollte in meinen Augen gut verständlich sein, was ein Thread ist, wieso es sie gibt, und was sie einem nützen.
    Wenn du weitere Fragen hast, immer her damit ;-)

    Liebe Grüße
  4. Nachdem ggamee das Thema so hübsch in Prosa formuliert hat, hier dennoch der link auf etwas Handfesteres:http://de.wikipedia.org/wiki/Thread_%28Informatik%29
    Ich finde den Artikel recht gut gelungen, auch wenn die Informationsdichte, speziell für Anfänger, recht hoch sein dürfte und gleich 'mal ordentlich abschreckt.

    In der Informatik ist es allerdings sehr wichtig, Konzepte, Architekturen und vieles Anderes "zu behirnen", also zu verstehen und das Beste daraus zu machen. Nicht alles läßt sich sofort verstehen, aber mit der Zeit wird's besser:-)

    Threads haben sehr viel mit Effizienz zu tun, daher lohnt sich der Vergleich diverser Betriebssysteme, Programmersprachen sowie die historische Entwicklung bis zum aktuellen Stand der Dinge.
  5. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Also ich sagte ja eigentlich keine Wikipedia Links, da ich mir das eigentlich schon mal hier und da durchgelesen hatte.

    Aber ggamee,
    da muss ich mich wircklich bedanken. Du hast das echt Klasse erklärt oder erzählt:smile:?
    Mit dem Vergleich von Firmen und Angestellen, etc. ist es im Grunde echt gut zu verstehen.

    Userthreads und Kernelthreads. Da muss ich mir mal später noch mehr darüber informieren. Aber ich denke vom Prinzip habe ich es verstanden, also die Logik dahinter:thumb:
  6. master4860 schrieb:
    Also ich sagte ja eigentlich keine Wikipedia Links, da ich mir das eigentlich schon mal hier und da durchgelesen hatte.
    Auch auf die Gefahr der "Wortklauberei" hin hast du dir lediglich "Zitate" verbeten, ich zitiere dich nun 'mal:
    Bitte antwortet nicht mit irgendwelchen Zitaten aus Wikipedia oder sonstwo
    Das ist nun ein Zitat, ich habe jedoch einen link gepostet.

    Siehste, in der Informatik mußt sehr penibel bei der Formulierung einer Spezifikation sein:-)

    Beitrag zuletzt geändert: 9.2.2014 19:39:26 von suge
  7. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Schon recht^^.
    Ja in der Informatik fängt man ja auch bei 0 zu zählen an :biggrin:
  8. master4860 schrieb:
    Schon recht^^.
    Ja in der Informatik fängt man ja auch bei 0 zu zählen an :biggrin:

    Nein. Im Dezimalsystem fängt man an, bei der 0 zu zählen. ;)

    Ansonsten danke ich ggame für die tolle Erklärung, in groberen Zügen hätte ich das auch umreißen können, aber das Beispiel mit der Firma ist richtig gut. :)
  9. master4860 schrieb:
    Ja in der Informatik fängt man ja auch bei 0 zu zählen an :biggrin:

    "Well, it depends" heißt's so schön im Englischen:
    Die meisten "üblichen" Programmiersprachen verwenden die Null als Basis beim Indizieren. Speziell Sprachen mit starker "C"-Affinität machen das so, z.B. Python.
    In Matlab/Simulink oder auch Pascal wird (zumeist) die Eins verwendet, was leider gerne zu Konfusion bei heterogenem Spracheinsatz führt:-(

    Die Null ist eine Gewohnheitssache, bei der Entwicklung/Implementierung von Algorithmen ist's aber sehr praktisch und natürlich zu verwenden.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!