schule:nebenlaeufigkeit
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
schule:nebenlaeufigkeit [2015-12-29 10:04] – angelegt marco.bakera | schule:nebenlaeufigkeit [2017-12-21 19:04] (aktuell) – +Links marco.bakera | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Nebenläufigkeit ====== | ||
+ | Wenn in einem Programm mehrere Dinge gleichzeitig ablaufen sollen, werden Threads verwendet. Einem Thread wird bei der Erzeugung der Name einer Methode im Konstruktor übergeben. Diese Methode wird beim Start des Threads ausgeführt. Das Programm wartet aber nicht, bis die Methode fertig ist, sondern läuft danach direkt weiter. Auf diese Weise können z.B. Berechnung im Hintergrund laufen, während die GUI der Anwendung weiterhin bedient werden kann. Die Berechnung und die GUI laufen in unterschiedlichen Threads. | ||
+ | |||
+ | Schauen wir uns nun den Quelltext an. | ||
+ | |||
+ | <code csharp> | ||
+ | using System; | ||
+ | using System.Threading; | ||
+ | |||
+ | namespace ThreadDemo | ||
+ | { | ||
+ | class MainClass | ||
+ | { | ||
+ | public static void Main(string[] args) | ||
+ | { | ||
+ | new MainClass().start(); | ||
+ | } | ||
+ | |||
+ | public void start() | ||
+ | { | ||
+ | // Erstelle zwei Threads. Als Argument wird der Name der | ||
+ | // Methode übergeben, die beim Start ausgeführt werden soll. | ||
+ | Thread threadX = new Thread(schreibeX); | ||
+ | Thread threadO = new Thread(schreibeO); | ||
+ | | ||
+ | // Starte beide Threads. Die Methoden laufen danach | ||
+ | // gleichtzeitig(!) ab. | ||
+ | threadX.Start(); | ||
+ | threadO.Start(); | ||
+ | } | ||
+ | |||
+ | void schreibeX() | ||
+ | { | ||
+ | for (int i = 0; i < 80; i++) | ||
+ | { | ||
+ | Console.Write(" | ||
+ | } | ||
+ | } | ||
+ | void schreibeO() | ||
+ | { | ||
+ | for (int i = 0; i < 80; i++) | ||
+ | { | ||
+ | Console.Write(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | Das Programm erzeugt bei mir folgende Ausgabe. | ||
+ | |||
+ | < | ||
+ | XXXOOOOOOOOOOOOOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
+ | XXXXXXXXXXXXXXXXXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO | ||
+ | </ | ||
+ | |||
+ | Das ist zunächst ungewöhnlich. Sollte man doch vermuten, dass erst alle X und danach alle O ausgegeben werden. Aber der Computer wechselt die laufenden Threads nacheinander durch und gibt jedem Thread ein paar Millisekunden Zeit für die Ausführung. Danach wird der Thread pausiert und der nächste ist an der Reihe. So kommt mal '' | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | Im Spiel [[http:// | ||
+ | |||
+ | ===== Links ===== | ||
+ | |||
+ | * Demonstrationsvideo Seriell vs. Parallel bzw. [[https:// |