Wie koennen 128 Threads gleichzeitig ablaufen?



  • Ich habe mich hier ueber unseren allseits beliebten Freund Sasser informiert.

    Dabei fiel mir bei ersterem das hier auf

    This worm creates 128 threads, which it uses to generate random target IP address numbers. It checks for the following IP addresses to know if the infected machine's IP address is a local network address or not:

    127.0.0.1
    10.x.x.x
    172.[16-31].x.x
    192.168.x.x
    169.254.x.x
    It uses this information for its propagation routine between external and local IP.

    Wenn der Wurm den PC uebers Inet erreicht hat, dann kann es doch keine local IP sein. Und was ist eigentlich damit gemeint..."propagation between external and local ip" ?

    Note that each propagation thread generates and attacks a random IP address at 250ms as follows:

    Number of attacks per second
    128 (threads) * (1/250ms) = 128 * 4 = 512 attacks per second

    Jeder Thread generiert eine IP pro 250ms(=1/4sek) und attackiert sie.
    Es gibt 128 Threads.
    Aber diese Threads koennen doch unmoeglich alle auf einmal ablaufen. Und da ein Thread unendlich viele IPs generiert, wartet das Programm so lange bis der Thread abgearbeitet ist.
    -> Also ewig.
    Deswegen geht es doch gar nicht das alle auf einmal ablaufen, wie es hier dargestellt wird.



  • Es wird nicht gewartet, bis ein Thread zuende gelaufen ist, bevor zum nächsten geschaltet wird. Da würd sich ein PC ja ständig aufhängen.
    Die CPU schaltet ständig von Thread zu Thread. Der gerade laufende Thread wird dann halt solange pausiert bis er wieder an der Reihe ist.



  • Ein Funktion repraesentiert ja einen Thread.
    Und das Hauptprogramm wird erst dann weiter ausgefuehrt, wenn diese Funktion beendet ist.

    Also

    int main()
    {
        foo1();
        foo2();
        foo3();
        foo4();
        .
        .
        .
        foo126();
        foo127();
        foo128();
    }
    

    Die werden doch alle nacheinander ausgefuehrt und nicht zugleich.

    mfg



  • Guest schrieb:

    Ein Funktion repraesentiert ja einen Thread.

    Wo hast Du das denn her???





  • Eine Funktion ist kein Thread! Das hast du falsch verstanden. Du kannst natürlich eine Funktion innerhalb eines Threads ausführen lassen. Wenn du jede Funktion in einem anderen Thread ausführst, dann laufen alle gleichzeitig.



  • Ist ein bisschen schwer zu beschreiben, ich weiss...

    Koenntest du es vielleicht mit Pseudocode etwas veranschaulichen?

    //Beispiel fuer den Code von Threads
    

    Oder so aehnlich?

    Danke 🙂



  • hö? 😕

    lies mal das: multithreading



  • 🙂

    Schon klar 😃

    Ich meinte jetzt die Codemaessige Implementation von Threads.
    (Siehe mein letzten Post)





  • Aha.
    Und wie ist es nun moeglich, bzw. zu implementieren, dass Threads gleichzeitig ablaufen koennen?



  • darum musst du dich nicht kümmern, dafür ist dein OS verantwortlich.

    Wie gesagt, lies dir folgendes durch multithreading, multitasking und scheduler da ist alles erklärt



  • Ich kenne Multithreading schon, aber kann ich es trotzdem in einem eigenen Programm selbst machen?

    creates 128 threads

    Demnach muss es ja gehn.
    Ich weiss nur kein konkreten Code fuer so etwas.



  • Dafür hast du ebenfalls schon einen Link gekriegt. Jetzt streng dich doch mal ein bisschen selber an.



  • Sendung mit den Threads:

    Ein Programm besteht aus genau einem Thread. Durch das starten wird dem Betriebssystem gesagt: "Hier ist ein Programm mit seinen Funktionen. Gib ihm etwas Rechenzeit."
    Diese Programm kann aber jetzt auch dem Betriebssystem sagen: "Hier habe ich eine Funktion. Führe diese bitte gleichzeitig mir aus. Also gib ihm die Gleiche Rechenzeit wie mir und den anderen Programmen(Threads). Ich warne dich aber. Dieser Codeteil(Thread) gehört trotzdem mir und wenn ich weg bin dann soll der Codeteil(Thread) auch weg sein".

    Wie diese Threads jetzt alle Rechenzeit bekommen hängt von der Priorit. ab und das ganze macht das Betriebssystem bzw. Scheduler,etc.



  • Ich verstehe.
    Ich dachte, Threads koennte man einfach nach einem bestimmten Muster implementieren. Dabei sind es komplexe, bereits definierte Libraries.

    Hab [url=http://www.linux-magazin.de/Artikel/ausgabe/1998/01/Threads/threads.html] einen sehr guten Artikel zu diesem Thema gefunden.



  • Dabei sind es komplexe, bereits definierte Libraries.

    Meinst du, "komplex zu benutzen"?
    Kommt darauf an. In Java kann jedes Kleinkind Threads nutzen. Wenn du natürlich direkt die Betriebssystemfunktionen nutzen willst... :p



  • @Optimizer
    also auch in C++ ist das nicht so die Welt, man muss eben nur so was wie boost::thread benutzen.

    Direkt mit der System-API rumfriemeln ist natürlich nicht so toll, die ist aber ja auch idr. C 🙄 :p



  • Meinst du, "komplex zu benutzen"?

    Keineswegs 🙂

    Kommt darauf an. In Java kann jedes Kleinkind Threads nutzen.

    ClientHandler handler =
    new ClientHandler( connection, accountDB );
    handler.start();

    Stimmt

    Wenn du natürlich direkt die Betriebssystemfunktionen nutzen willst...

    Wie gesagt, in C++.. also doch komplex 😉


Anmelden zum Antworten