Announcement

Collapse
No announcement yet.

Multithreading simulieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Multithreading simulieren

    Ich habe das Problem das ich ein Programm schreiben will in welchem ich bis zu tausend einzelne Threads unterstützen müsste. Allerdings habe ich dabei dann das Problem, das damit kaum ein OS klar kommen sollte.

    Somit stellt sich die Frage wie soll ich das nun machen?
    Ich kam darauf auf die Idee einfach selber dieses Multithreading zu simulieren. Jetzt habe ich so ein Teil geschrieben, was mit etwa 10 Threads mehr als 1000 Objekte verarbeiten kann.

    Allerdings habe ich das Problem das ich damit den Rechner immer zu 100% auslasten muß. Denn Ich kann den Threads nicht anweisen das sie warten sollen. Denn sie sollen ja alle 1000 Objekte "parallel" abarbeiten.

    Wie könnte man es nun realisieren das die Threads nur dann, aber sofort, aktiv sind wenn Arbeit anliegt.

    Und gibt es vieleicht neben dem java.util.Timer noch eine andere Klasse mit der so etwas möglich ist, denn es ist notwendig das jeder der 10 Threads jedes Objekt erreichen kann. Denn einzelne Objekte könnten kurzeitig blockieren.

    Ich wäre für jede Hilfe dankbar, auch wenn sie nur von "Theoretischer Natur" ist.

    mfG Tobias Oelgarte

  • #2
    Hi,

    das geht mit einem Thread-Pool. Hab ich glaub ich auch schon mal gemacht, bin jetzt aber leider grad unterwegs. Klick auf meinen Namen und schreib ne Mail oder poste Deine Adresse. Und bitte sag nochmal genau, WAS Du eigentlich machen willst, oben isses ein bissel schwammig

    c

    Comment


    • #3
      <b>Danke</b> erst mal,
      aber hat vieleicht jemand schon so etwas wie einen ThreadPool geschrieben? Denn ich habe schon mal so etwas probiert. Allerdings war ich mit dem Ergebnis nicht sehr zufrieden denn dieser lastete das System egal bei welchem Zustand zu 100% aus.

      Ich fand zwar schon etliches zu diesen ThreadPools, aber meist sind das halt nur die Beschreibungen oder JavaDocs. Aus diesem Grund weiß ich nicht wie man das ganze nun konkret umsetzen könnte. Gibt es so was vieleicht auch als "Open Source"?

      Natürlich intressiert mich auch wie das ein System wie Linux oder Windows umsetzt. Denn dort steht ja nur ein "MainThread" zur Verfügung. Und dieser muß ja nahezu beliebig unterbrechbar sein. Gibt es dazu vieleicht ein paar schöne Seiten im Netz? Wenn ja immer her damit, obwohl ich eigentlich nicht gerne anfage zu betteln. :-)

      mfg Tobias Oelgart

      Comment


      • #4
        Hallo Tobias,<br>
        einen "Open Source" Thread Pool gibt es in dem Buch<br>
        Java Thread Programming von Paul Heyde, isbn 0-672-31585-8.<br>
        Das Buch ist auch ansonsten SEHR lesenswert.
        <p>
        Klau

        Comment


        • #5
          Also nach dem was ich bis jetzt rausbekommen habe ist ein ThreadPool eigentlich nichts weiter als ein Speicher in welchem initialisierte Threads abgelegt werden. Diese Thread werden darauf mit <b>wait()</b> zum stehen gebracht.

          Nun gibt es einen art MainThread welcher nun durch eine Liste von Aufgaben geht und sich für den Auftrag einen Thread besorgt. Dieser Thread wird nun "aufgeweckt" (<b>notify()</b>) und erledigt daraufhin die Aufgabe.

          Und nun ergibt sich das erste Problem. Alle Objekte welche dort von einem solchen WorkerThread bearbeitet werden sollen, müssen ein Interface besitzen über welches der Thread an seine "Arbeit" gelangt. Wie genau sieht aber nun so ein Interface aus?

          Eine einzelne Methode wie <b>execute()</b> welche in der Schnittstelle implementiert dürfte doch wohl kaum ausreichen oder?

          Hat also vieleicht noch jemand eine URL als Beispiel oder kann es mir zuschicken? (<i>Hab halt kein Geld für Bücher</i> :-( )

          mfg Tobias Oelgart

          Comment


          • #6
            Guten Morgen Tobias,

            den Sourcecode von Hydes Buch kannst du dir hier runterladen:

            http://www.samspublishing.com/display_sams.cfm?item=0672315858&itemhdr=Source%20 Code&itemloc=sourcecode

            Thoma

            Comment

            Working...
            X