====== 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. 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("X"); } } void schreibeO() { for (int i = 0; i < 80; i++) { Console.Write("O"); } } } } 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 ''threadX'' und damit die Methode ''schreibeX()'' und mal ''threadO'' und damit Methode ''schreibeO()'' dran. [[http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_15_002.html|Kapitel 15.2 in Visual C# 2012]] erklärt weitere Details und Herr Rau hat in dem Artikel [[http://www.herr-rau.de/wordpress/2015/12/threads-i-allgemeines-und-erstes-java.htm|Threads I – Allgemeines und erstes Java]] im ersten Abschnitt eine gute Erklärung für Threads geliefert. Im Spiel [[http://deadlockempire.github.io/|The Deadlock Empire]] muss man mehrere nebenläufige Prozesse so steuern, dass das Programm abstürzt. Dabei lernt man eine Menge über die vielen Fallstricke der nebenläufigen Programmierung. ===== Links ===== * Demonstrationsvideo Seriell vs. Parallel bzw. [[https://youtu.be/-P28LKWTzrI|CPU vs. GPU]]