Mir wurde klar, dass ich eine massive Wissenslücke habe, wenn es um Multithread-Anwendungen und gleichzeitige Programmierung geht. Ich habe in der Vergangenheit einige Grundlagen behandelt, aber das meiste scheint mir aus dem Kopf gegangen zu sein, und es ist definitiv ein Bereich, über den ich mehr wissen möchte und muss.
Was sind die besten Ressourcen zum Erstellen von gleichzeitigen Anwendungen? Ich bin eine sehr praxisorientierte Person. Wenn das Buch also konkrete Beispiele enthält, ist es besser, aber ich bin offen für Vorschläge. Ich persönlich bevorzuge die Arbeit in Pseudocode oder C ++, und eine Neigung zur Spieleentwicklung wäre am besten, aber nicht erforderlich.
Antworten:
Dies sind die Bücher, die ich in letzter Zeit nützlich fand:
Java-Nebenläufigkeit in der Praxis - vom Autor vieler Java-Nebenläufigkeitsprogramme. Etwas Java-spezifisch, aber sehr klar und informativ über die Gefahren und Fallstricke von Threads.
Die Kunst der Parallelität - keine funkelnde theoretische Abhandlung, wie der Titel andeutet, sondern ein eher volkstümliches und bodenständiges Kompendium nützlicher Ratschläge und Beispiele.
Gleichzeitiges Programmieren mit der JVM - Diese theoretische Abhandlung ist tatsächlich brillant, aber sehr, sehr lesbar und aufschlussreich. Wenn Sie wissen möchten, was STM oder Schauspieler sind, wo ihre Stärken und Schwächen liegen und warum , wird Ihnen dieses Buch helfen .
Es gibt viele dedizierte Hilfsprogrammbibliotheken wie die Intel Threading Building Blocks oder die Grand Central Station von Apple - diese verfügen im Allgemeinen über eigene, dedizierte Handbücher, die normalerweise recht gut sind und trotzdem gelesen werden müssen, wenn Sie mit ihnen etwas Großes anfangen möchten.
quelle
Ich fand diese kostenlose Threading-Ressource von Joe Albahari ausgezeichnet ...
Threading in C #
Es ist in Richtung C # geneigt, aber die Konzepte sind vollständig auf andere Sprachen anwendbar. Er bietet das Tutorial auch als PDF-Download in Englisch und mehreren anderen Sprachen an. Ich würde es aufgrund der Kombination aus Beispielcode, schrittweisen Erklärungen des Codes und hervorragenden Sequenz- und Zustandsdiagrammen, die den Beispielen beiliegen, empfehlen.
Das Tutorial besteht aus fünf Teilen:
Es ist in Buchform hier erhältlich: C # 4.0 in Kürze (Kapitel 23 und 24)
quelle
Es gibt viele Parallelitätsmodelle, daher sollten Sie sich zunächst eine gute Vorstellung von allen machen, bevor Sie sich für eines entscheiden. Dafür empfehle ich das Buch Sieben Concurrency Models in sieben Wochen: When Threads Unravel . Überprüfen Sie die Bewertungen und das Inhaltsverzeichnis und Sie können sehen, warum dies ein gutes Buch ist. Und es ist auch neu (2014).
quelle
Es gibt jetzt Threading-Möglichkeiten im C ++ - Standard. Wenn Sie also in C ++ lernen möchten, empfehle ich, einen einfachen Überblick über die neue Sprachfunktion zu lesen, bevor Sie zu einem allgemeinen Threading-Tutorial übergehen. Gehen Sie dann zurück und überprüfen Sie den Standard später genauer.
In der Praxis ist Threading eines der Dinge, die die meisten Leute zu verstehen glauben, aber nicht. Ich ging zu einem Vortrag eines statischen Analyseforschers, der Rennbedingungen in einer IBM-Forschungsdatenbank (Java), in einem Linux-Dateisystem (C) und in einigen anderen hochkarätigen Projekten identifizierte. Einige der Projekte wurden von angesehenen Experten für Parallelität und Threading geschrieben. Beachten Sie, dass es schwierig ist, thread-sicheren Code zu erstellen, und dass die Wissenslücke nicht nur für diejenigen gilt, die ihn an sich erkennen.
Obwohl es Ihnen bei der Programmierung von Spielen nicht direkt weiterhilft, würde ich empfehlen, sich einige MPI-Tutorials anzuschauen (Entschuldigung, keine spezifischen Empfehlungen). Während es schwierig zu sein scheint, korrekten gleichzeitigen Code mit Threads zu schreiben, scheint es ziemlich einfach zu sein, dies mit der Nachrichtenübergabe zu tun. Indirekt besteht die Hoffnung darin, dass das Erforschen verschiedener Parallelitätsmodelle Ihrem eigenen Denkprozess bei der Strukturierung Ihres Codes hilft, damit dieser thread-sicher ist.
quelle
Verwenden Sie zum Erlernen der Parallelität eine Sprache, die für die Parallelität entwickelt wurde. Golang ist eine gute Wahl, da es die Parallelität und eine C-ähnliche Syntax unterstützt, die es den meisten Programmierern erleichtert, die Sprache zu lernen.
Es verfügt über Message-Passing, Mutexe usw., die fast alle Ihre Anforderungen an die Parallelität abdecken und kompliziertere Entsprechungen in anderen Sprachen aufweisen.
Beispiel: Empfangen eines Int von einem anderen Thread in eine Variable
a
mithilfe von MPI in C:Empfangen eines int in die Variable a von einem anderen (Benutzer-) Thread in go:
In der Go-Tour können Sie lernen, wie man Go-Code in Ihrem Browser schreibt, kompiliert und ausführt.
tour.golang.org
Zum parallelen Teil springen
http://tour.golang.org/concurrency/1
Mein ehemaliger Professor hielt einen sehr beliebten Kurzkurs für CS-Studenten im ersten Jahr zum Thema Parallelität ab. Für eine schnelle, aber gründliche Einführung in die Parallelität empfehle ich auf jeden Fall, diese zu lesen.
Grundlagen der gleichzeitigen Programmierung
quelle