Nebenläufigkeit



  • Wenn du es noch nie so genau verstanden hast, dann solltest du erstmal nachlesen was Prozess, Thread und MPI bedeutet.
    Dann erübrigen sich nämlich einige Fragen.

    Was Netzwerk angeht: es gibt Sprachen, die ihre Programme automatisch über's Netz verteilt laufen lassen können. Ist aber alles nicht ganz trivial, da man aufpassen muss, dass man nicht zu viele Daten zwischen den einzelnen Threads/Computern/... rumschicken muss. Sonst wird nämlich alles nur langsamer anstatt schneller.



  • hustbaer schrieb:

    Was Netzwerk angeht: es gibt Sprachen, die ihre Programme automatisch über's Netz verteilt laufen lassen können.

    Erlang bietet sich für so etwas z.B an. Da ist Netzwerk bereits mit der Sprache mit dabei. Recht angenehm.



  • Was Netzwerk angeht: es gibt Sprachen, die ihre Programme automatisch über's Netz verteilt laufen lassen können

    Welche wären das denn?

    Zum Nachlesen: im Grunde sollte (KONJUNKTIV) mein Wissen ja ausreichen aber ich kapiers einfach nicht und würde nur gern einiges erklärt bekommen.

    Auch hierzu:

    Das kann explizit geschehen, zum Beispiel dadurch, dass der Programmierer Programmteile in separaten Prozessen oder Threads ausführen lässt, oder es geschieht automatisch, so dass kausal unabhängige (nebenläufige) Anweisungsfolgen "nebeneinander" ausgeführt werden. Diese automatische Parallelisierung kann durch den Compiler vorgenommen werden, wenn als Zielplattform ein Parallelrechner zur Verfügung steht, aber auch einige moderne CPUs können solche Unabhängigkeiten erkennen und die Anweisungen so auf verschiedene Teile des Prozessors verteilen, dass sie gleichzeitig ausgeführt werden (Pipeline-Architektur).

    Auf verschiedene Teile des Prozessors? ich dachte ein Prozessor kann nur eine Aktion auf einmal ausführen?

    Da das Betriebssystem für Scheduling zuständig ist dürfte bei fork() oder MPI das Betriebsystem die Aufteilung übernehmen oder ist das schon eine falsche Annahme.
    Threads sind ja sozusagen "in" einem Prozess, wie könnten die dann auf mehrere Prozessoren aufgeteilt werden?!



  • shisha schrieb:

    Auf verschiedene Teile des Prozessors? ich dachte ein Prozessor kann nur eine Aktion auf einmal ausführen?

    Wisse: Ein Prozessor kann aus mehreren Kernen bestehen. Du hast doch EINEN Quadcore-Prozessor, oder?

    Da das Betriebssystem für Scheduling zuständig ist dürfte bei fork() oder MPI das Betriebsystem die Aufteilung übernehmen oder ist das schon eine falsche Annahme.

    Multi-Prozess heißt nicht zwangsläufig fork(). Du kennst doch system(), oder?

    Threads sind ja sozusagen "in" einem Prozess, wie könnten die dann auf mehrere Prozessoren aufgeteilt werden?!

    Das macht das Betriebssystem.



  • shisha schrieb:

    Was Netzwerk angeht: es gibt Sprachen, die ihre Programme automatisch über's Netz verteilt laufen lassen können

    Welche wären das denn?

    Wie ich bereits sagte. Erlang zum Beispiel.

    Ein Singlecore Prozessor emuliert Parallelität indem er Anweisungen nicht strikt sequentiell abarbeitet, sondern immer mal wieder jemand anderem ein kleines Zeitstückchen gibt, um zu arbeiten (sonst könnten wir ja kaum ein Betriebssystem und Browser gleichzeitig laufen haben..). Das kannst du jetzt auch für ein einzelnes Programm steuern.

    Du scheinst ein kleines Problem mit der Nomenklatur zu haben. Ein Thread ist ein Ausführungsstrang und der kann irgendwo sein. Auf dem gleichen Prozessor, auf einem anderen, in einem anderen PC usw.
    Du machst jetzt einfach ein Programm, welches die aufwändigen Schritte in mehreren Threads macht und dann sollte ein aktuelles OS diese Threads selbstständig auf die verfügbaren Prozessoren aufteilen.



  • shisha schrieb:

    Was Netzwerk angeht: es gibt Sprachen, die ihre Programme automatisch über's Netz verteilt laufen lassen können

    Welche wären das denn?

    Pfoah, müsste ich selbst wieder recherchieren. Hab da mal ein paar Artikel drüber gelesen, wo auch ein paar Sprachen genannt wurden. Keine Mainstream Sprachen, daher kannte ich die meisten Namen auch nicht, und hab sie hübsch gleich wieder vergessen. Erlang wurde ja schon genannt.


  • Mod

    hustbaer schrieb:

    shisha schrieb:

    Was Netzwerk angeht: es gibt Sprachen, die ihre Programme automatisch über's Netz verteilt laufen lassen können

    Welche wären das denn?

    Pfoah, müsste ich selbst wieder recherchieren. Hab da mal ein paar Artikel drüber gelesen, wo auch ein paar Sprachen genannt wurden. Keine Mainstream Sprachen, daher kannte ich die meisten Namen auch nicht, und hab sie hübsch gleich wieder vergessen. Erlang wurde ja schon genannt.

    MPI? Na gut, keine echte Sprache aber verteiltes Rechnen (auch über inhomogene Netzwerke) ist eine der großen Stärken dieses Frameworks. Ist allerdings nicht trivial aufzusetzen 👎 . Aber wenn es erstmal läuft... 👍



  • Fange einfach mit einem Client/Server-Modell an! Hier: http://beej.us/guide/bgipc/ und http://beej.us/guide/bgnet/ .



  • Wie wäre es denn mit OpenMP?



  • Dieser Thread wurde von Moderator/in pumuckl 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.


Anmelden zum Antworten