[Java] [Problem] Threads

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mutator, 26. November 2007 .

Schlagworte:
  1. 26. November 2007
    [Problem] Threads

    Hallöle liebe Gemeinde,

    ich bin momentan am schreiben eines FTP Scanners in Java ala Grims Ping halt ^^

    Gerade bin ich gerade am Herzstück des Programmes angelangt, nämlich den Threads und hier bin ich am überlegen wie ich hier am besten vorgehen kann.
    Meine 2 bis jetzt entstandenen Lösungswege sind:

    1.)
    Es so zu schreiben das jeder Thread für sich alleine läuft und aus einem Kritischen Block die IP bezieht und vor beenden des Blocks die IP dann erhöht für den nächsten Thread.

    Vorteil:
    -Schneller (Threads werden nicht still gelegt wie ind er 2. methode)

    Nachteil:
    -chaotischer (Synchronisation ist schwer zu realisieren)
    -risiko eines Deadlocks

    2.)
    Neber den anderen Threads einen "Über"-Thread erstellen der dann die anderen Threads überwacht und Steuert. Die anderen Threads werden dabei nachdem sie die IP gescannt haben eingefroren und wenn sie von dem über Thread eine IP zugewiesen bekommen haben wieder aktiviert (auch vom Über-Thread).

    Vorteil:
    -Synchronisation
    -kein risiko eines DeadLocks da alles vom Über-Thread geregelt wird

    Nachteil:
    -langsamer da die Scan Threads warten bis alle fertig gescannt haben

    Wie es mit dem reccourcenhunger der beiden methoden angeht habe ich mir noch nicht so wirklich viele gedanken gemacht.

    Welche Methode ist nun Eleganter / effektiver / hardware freundlicher ? ^^

    greetz Mutator
     
  2. 26. November 2007
    AW: [Problem] Threads

    darf man frage, an wie viele threads du da gedacht hast?? bzw. für welche elemente jeweils nen eigenen thread machen? also so wie ich dich verstehe, willst du z.B. pro port nen thread machen, und dann soll jeder jede ip durchchecken, oder? würde glaub ich nicht machebar sein mit den ressourcen eines normalen pc's. allgemein ist es so, dass nicht allzu viele threads paralell sauber laufen, das risiko eines absturtzes ist relativ hoch...
     
  3. 26. November 2007
    AW: [Problem] Threads

    Du könntest die IP-Range beim starten auch in mehrere Teile splitten und den Threads dann die Teile durchlaufen lassen.

    Hat den Vorteil das es die ganze Sache ziemlich vereinfacht, falls jedoch eine Range schneller als die anderen durch ist, kann der Thread nix weiter mehr machen
     
  4. 26. November 2007
    AW: [Problem] Threads

    wie viele Threads parallel laufen sollen wird der Benutzer selbst definieren können ( Benutzereinstellungen )

    und die Threads sollen eigentlich nur die funktion haben zu versuchen auf den FTP zu zu greifen wenn verbindung steht -> test ob schreib- / löschrechte -> ende bzw. wieder von vorne mit ner anderen IP
    ein Portscan soll es ja nicht sein sonder test ob anonymer zugriff auf den FTP Server möglich ist.

    Die sache mit dem Range aufteilen und dann von den Threads scannen halte ich für keine soooo geschickte lösung weil die ergebnisse später dann extra sortiert werden müssen und ich diesen mehraufwand irgendwie vermeiden wollte ^^
     
  5. 26. November 2007
    AW: [Problem] Threads

    Ich würde dir - um den Aufwand zu sparen - zu einem ThreadPool raten. Das gibts sicher in Java (oder von Drittanbietern).
    Das is ein Objekt, da pushst du quasi alle deine IP's drauf, sagst dem Pool wie viele Threads er max. starten soll und der Pool kümmert sich dann von alleine drum, welcher Thread welche Arbeit kriegt.

    Wenn dus nicht so machen willst:
    Ich würde die erste Methode nehmen. Wieso glaubst du eigentlich, dass die Synchronisation eigentlich schwieriger ist? Du brauchst ja eigentlich nur ne Queue wo alle IP's drinstehen. Dann in einer CriticalSection die nächste IP holen (wird dabei aus der Queue gelöscht). Der nächste Thread kriegt dann automatisch die nächste IP.
    Die zweite Methode wäre eher schwerer zu synchronisieren, da du der Master-Thread ja bei jedem einzelnen Thread schauen müsste, ob noch genügend Arbeit da is etc.
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.