Ich bin derzeit ein C # -Entwickler mit einem ziemlich unsicheren Verständnis von Threading.
Diese beiden Links wurden in anderen Beiträgen vorgeschlagen:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
Sollte ich zurück zu den Grundlagen gehen und mir vielleicht einige Informatiktexte zu diesem Thema ansehen?
Ich habe wirklich das Gefühl, dass ich, wenn ich in die C # -Bibliotheken einspringe und sie benutze, nicht wirklich eine solide Wissensgrundlage habe, auf der ich aufbauen kann. Ich denke, ich muss dieses Thema von Grund auf lernen, wie ein Com-Sci-Student, und dann die C # -Bibliotheken verwenden.
Kann jemand einen Ansatz zum Lernen von Threading vorschlagen, vielleicht einige Links und oder Projektideen?
Danke im Voraus!
Edit, danke für alle Antworten. Einige Leute haben erwähnt, dass ein Buch eine gute Idee sein könnte, kann jemand eine vorschlagen? Ich würde etwas Sprachunabhängiges bevorzugen. Weiß jemand, in welcher Klasse dieses Zeug in einem Informatik-Abschluss behandelt werden würde? Ich versuche, online nach kostenlosen Notizen und Aufgaben zu suchen.
Antworten:
Schreiben Sie einen Multithread-Webserver. Sie werden eine TONNE lernen . Und nicht nur ums Einfädeln.
quelle
Das Producer-Consumer-Problem ist ein klassisches Beispiel und hilft Ihnen dabei, nicht nur das Threading, sondern auch die Prozessorplanung zu verstehen (dies kann mit fork () für untergeordnete Prozesse im Gegensatz zu Threads demonstriert werden) und wie Ihre Programme mit dem dahinter stehenden Betriebssystem interagieren die Szenen.
Hier ein Überblick über die wichtigen Dinge, die Sie in Bezug auf Threading / Forking verstehen sollten: 1. Wie das Betriebssystem Aufgaben plant (zum Beispiel Round-Robin-Algorithmus) 2. Ressourcensperrung (Wenn mehrere Threads dieselbe Ressource verwenden, möchten Sie dies nicht gleichzeitig auf sie zugreifen - BAD THINGS HAPPEN)
Hier ist ein Wiki-Artikel zu diesem klassischen Problem: http://en.wikipedia.org/wiki/Producer-consumer_problem
Erstellen Sie im Grunde genommen einen "Produzenten", der Threads von "Verbrauchern" erzeugt. Der Produzent produziert eine "Ressource" und die Konsumenten konsumieren sie. Stellen Sie es in eine Schleife und beobachten Sie, was passiert (Sie werden überrascht sein, dass die Verbraucher aufgrund nicht synchronisierter Methoden letztendlich mehr Ressourcen verbrauchen als verfügbar sind).
quelle
Wählen Sie eines der klassischen hochparallelen Probleme. Vielleicht ist es interessanter, eine mit superlinearer Beschleunigung auszuwählen.
Überlegen Sie, ob Sie eine nicht sortierte und nicht indizierte Liste durchsuchen möchten. Dieses Problem ist trivial parallel. Implementieren Sie zuerst eine Suche mit einem Thread und dann eine naive parallele Suche. Implementiere Work-Stealing. Generieren Sie einige zufällige Datensätze und führen Sie alle drei Versionen auf denselben Datensätzen aus. Berechnen Sie die Beschleunigung.
quelle
Ich denke nicht, dass ein Lehrbuch der nächste beste Schritt ist. Ein Projekt ist der richtige Weg. Es sollte etwas sein, worüber Sie aufgeregt sind.
Beim ersten Threading habe ich die Leistung eines Webcrawlers verbessert. Sie können viel schneller crawlen, wenn Sie nicht alle Netzwerk-E / A-Vorgänge seriell ausführen. Dies ist zunächst ein großartiges Projekt, da Sie es auf verschiedene Arten angehen können, aber es ist bei weitem nicht so kompliziert wie beispielsweise die Multithread-GUI-Programmierung. Es erfordert auch nicht viel Fachwissen (zum Beispiel viel Rechenarbeit).
Also, finde ein paar Informationen heraus, um loszulegen und zu hacken. Es sollte nicht lange dauern, bis etwas in Gang kommt, es wird eine sanfte Einführung sein.
quelle
Modellieren Sie eine einfache Spy vs. Spy-App.
Jeder Spion läuft auf einem eigenen Thread.
Jeder Spion kann dem anderen Spion Schaden zufügen, aber nicht direkt.
Jeder Spion kann dem anderen Spion wertvolle Ressourcen stehlen, aber nicht direkt.
Beide Spione verfügen über einen begrenzten Vorrat an Ressourcen und müssen diese gemeinsam nutzen. Es kann jeweils nur ein Spion eine bestimmte Ressource verwenden.
quelle
Aus dem Häuschen: Die 4. Ausgabe von Bruce Eckels Buch "Thinking in Java" enthält ein sehr langes Kapitel zum Thema Threading (> 100 Seiten - fast ein kleines Buch für sich). Ich habe ältere Ausgaben des Buches gelesen und dieses Kapitel nicht gelesen. Aber ich erinnere mich an einen seiner Blogposts (oder die Release Notes seines Buches), in denen er behauptet, dass das Schreiben sehr schwer war und es am Ende eine echte Leistung für ihn war. Hör zu...
Abgesehen davon gibt es diesen 2,5-stündigen Videokurs auf dieser kommerziellen Schulungsseite. Sie können jedoch eine kostenlose Testversion erhalten.
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
quelle
Das ist immer eine gute Wahl und ich würde empfehlen, dass Sie sich ein gutes Threading-Buch zulegen, um sich mit dem Thema Threading vertraut zu machen. Ich habe Multithreading in Java gelernt und das Wissen leicht in C # übersetzt.
Wenn Sie ein praktisches Beispiel wollen, dann würde ich Ihnen empfehlen, das Problem des Essensphilosophen zu versuchen .
Sie müssen einige Dinge lernen, wenn Sie in Multithreading einsteigen:
Ich kann im Moment nicht an andere Dinge denken. Das Albahari-Tutorial sieht wirklich gut aus!
quelle