[ C# ] - Zwei Schleifen parallel laufen lassen. Ist soetwas möglich?

5 Antworten

  1. 1 CPU = 1 Registersatz
  2. Mehrkern-CPU = mehrere Registersätze
  3. Weder Multitasking noch Multithreading sind tatsächlich „multi“. Ein Registersatz kann IMMER nur eine Task bzw. einen Thread bearbeiten. Da die CPU's natürlich sehr schnell arbeiten, können sie auch schnell eine Task wechseln. Ein solcher Taskwechsel verursacht natürlich immer Zeit: Register sichern und gesicherte Register der neuen Task laden. Prüfen was anliegt usw usf …
  4. Es ist daher völliger Unsinn zu glauben, der Computer oder ein Smartphone könnten Multitasking. Dieser Begriff wurde mal irgendwann seitens der Systemprogrammierer für Betriebssysteme eingeführt und ist aber im Grunde irreführend. Eingeführt wurde dieses System, weil die CPU sonst eher „arbeitslos“ wäre!
  5. Eigentlich ist der Ablauf bei Computern so, dass zunächst das System geladen wird und in einer Endlosschleife läuft. Wenn ein Anwender ein Programm startet, kommt dieses in den Vordergrund und nutzt nebenbei auch Systemdienste.
  6. Wenn du dir den Taskmanager ansiehst, werden die einzelnen Tasks mindestens in System- bzw. Anwendertasks unterschieden. Die Trennung der Tasks in viele einzelne Tasks erfolgt einfach deshalb, damit die Aufgaben klar abgegrenzt sind. Die einzelnen Tasks werden vom Betriebssystem verwaltet. Der Taskmanager zeigt sie „nur“ an …
ohwehohach  19.01.2017, 11:42

Bin grad hierüber gestolpert und muss die Frage nach dem Jahrzehnt stellen, in welchem Du gelernt hast? Früher war das alles sicherlich richtig, aber wie Du selbst schreibst: Mehrkern-CPU erlaubt eben nicht nur echtes Multi-Threading (vor allem durch Hyper-Threading), sondern eben auch echtes Multi-Tasking.

Daher waren die Punkte 3 und 4 sicherlich zu Zeiten, als es nur Ein-Prozessor/Ein-Kern Systeme gab richtig. Heute aber nicht mehr. Und 5 und 6 tragen nichts zur Antwort bei.

0
wolfgang1956  19.01.2017, 13:42
@ohwehohach

Bin grad hierüber gestolpert

„Stolpern“ ist ungenügend, man muss sich das alles auch mal klar machen, damit es sitzt und verstanden wird.

Leider arbeiten auch die Kerne mehrkerniger CPUs wie eine einzelne CPU. Natürlich wurden und werden die Systeme „moderner“ und effizienter, doch an den generellen Funktionen der CPUs können sie nichts ändern.

Das ist wie mit vererblichen Krankheiten, die man nicht heilen kann, weil kein Medikament in das Erbgut des Patienten eingreifen kann …

Daher waren die Punkte 3 und 4 sicherlich zu Zeiten, als es nur Ein-Prozessor/Ein-Kern Systeme gab richtig.

Das gilt auch heute noch, weil sich die Funktionsprinzipien der CPUs nicht geändert haben.

Quanten-Rechner sind zwar in der Erforschung, doch ist deren kommerzielle Nutzung noch sehr in der Zukunft zu sehen … :-)

Und 5 und 6 tragen nichts zur Antwort bei.

Das solltest du den Schreiber beurteilen lassen, zumal er einfach noch ein paar Erläuterungen ergänzen wollte.

Sei' doch einfach mal positiver … :-)

Mit einer Hochsprache wie C# die Register „direkt“ beeinflussen zu wollen ist wohl auch etwas vermessen … :-)

0

Hi ,

das ist multithreading.

Multithreading bedeutet nichts anderes , als das jedem thread eine zeitspanne (in dem fall 500 und 1500 ms ) zugewiesen wird und diese dann abgearbeitet wird. Bei Prozessen heisst das dann übrigens scheduling ...

Ich weiß , ist blöd. eigentlich ist es nämlich kein "multi" threading. es ist einfach nur threading.... das ist so ähnlich wie bei den menschen . die denken auch sie können multitasking... eigentlich switchen sie nur ihre tasks.

Gruß

Mikkey  19.11.2015, 17:52

Tut mir leid, Deine letzte Bemerkung nicht so stehenlassen zu können, aber seitdem es Rechner mit mehreren Prozessoren gibt, ist auch Multithreading echte Parallelverarbeitung.

0

Ich verstehe nicht ganz was du machen moechtest, aber du kannst ein EventHandler nutzen der von dein thread getriggert wird.... diese event handler kann dann dein sendkeys uebernehmen.

Möglich ist das. Allerdings würde ich schleifen soweit möglich immer eine Abbruchbedingung verpassen. Aber Sendkey in 2 parallelen Schleifen? Wozu? Du kannst doch immer nur ein Zeichen darstellen/senden (mehrere halt nur nacheinander). Das bedeutet, dass Du die Reihenfolge der Zeichen aus beiden Schleifen auch nicht wirklich zeitlich kontrollieren kannst und Du am Ende Zeichensalat erhälst und nicht zwingend das gewünschte Ergebnis. Sieh Dir doch mal folgendes Beispiel an:

http://coders-corner.net/2013/02/17/multithreading-in-c-teil-5-parallele-schleifen-mit-parallel-for-und-parallel-foreach-entwickeln/

Das aktuelle Galileo Open Book Kap. 15.3.1 ist auch einen Blick wert.

zagaris123 
Fragesteller
 17.10.2014, 05:18

Vielen vielen Dank schonmal.. Ja du hast recht mit dem Zeichensalat. Ich wollte es halt so veranschaulichen dass die 1. Schleife "1" schreibt und die 2. Schleife "2" schreibt.

Auch wenn ich bei meinem Experiment nicht wirklich weiter gekommen bin habe ich alleine durch die intensive Beschäftigung mit dem Problem so einiges verstanden.

lg. Lukas

1