Wie würden Sie Parallelität und Multithreading üben? [geschlossen]

33

Ich habe über Parallelität, Multithreading und wie "das kostenlose Mittagessen vorbei ist" gelesen . Aber ich hatte noch nicht die Möglichkeit, MT in meinem Job einzusetzen.

Ich bin daher auf der Suche nach Vorschlägen, wie ich durch Übungen oder die Teilnahme an Open-Source-Projekten etwas Übung in CPU-schwerem MT bekommen kann.

Vielen Dank.

Bearbeiten: Ich interessiere mich mehr für Open-Source-Projekte, die MT für CPU-gebundene Aufgaben verwenden, oder einfach für Algorithmen, deren Implementierung mit MT interessant ist, anstatt für Bücher oder Artikel, in denen nur die Tools wie Threads, Mutexe und Sperren beschrieben werden wie MT verwendet werden kann, um ansprechende GUIs zu haben ...

Xavier Nodet
quelle
1
Möglicherweise von Interesse: programmers.stackexchange.com/questions/24936/…
Orbling
5
F: Wie würden Sie Parallelität und Multithreading üben? A: durch Jonglieren
Steven A. Lowe
@Steven: Eigentlich nicht so weit weg.
Robert Harvey
Der Link "Das kostenlose Mittagessen ist vorbei" ist tot
Benutzer
Sollte jetzt in
Ordnung sein

Antworten:

15

Joseph Albaharis Artikel über Threading in C # ist eine der besten Ressourcen, die ich je gesehen habe.

Das Inhaltsverzeichnis ist unten. Beachten Sie, dass einige der Themen, wie z. B. die Task Parallel Library, spezifisch für .NET sind, ein Großteil davon jedoch für andere Sprachen, insbesondere für Java, gilt.

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

Sie können sich auch Jon Skeets Tutorial hier ansehen: http://www.yoda.arachsys.com/csharp/threads/

Robert Harvey
quelle
3
Ich füge Ihrer Antwort die C # -Mutlithreading-Seite von Jon Skeet hinzu: yoda.arachsys.com/csharp/threads
1
Zweitens gefiel Albaharis 5 Kapitel äußerst hilfreich. Im Folgenden finden Sie eine einfache Übung: Erstellen Sie ein Mehrspieler-Tic-Tac-Toe-Spiel mit WCF (sofern Sie dies wissen) und eine einfache Benutzeroberfläche. Aktualisieren Sie die Steuerelemente der Benutzeroberfläche mit den Antworten der einzelnen Spieler. Haben Sie den Firefox-Code überprüft?
Narayana
Würde es Ihnen etwas ausmachen, mehr darüber zu erklären, was es tut, und warum empfehlen Sie es als Antwort auf die gestellte Frage? "Nur-Link-Antworten" sind bei Stack Exchange
Uhr
1
@gnat: Ich habe das Inhaltsverzeichnis in meine Antwort eingefügt.
Robert Harvey
Der Link zu Jon Skeets Tutorial schien nicht zu funktionieren (ich habe eine Azure 404-Seite erhalten) - hier ist ein Archiv davon: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare
13

Java Concurrency in Practice ist eines der besten Bücher zum Thema Multithreading und Concurrency. Obwohl alle Beispiele in diesem Buch auf Java basieren, bietet dieses Buch eine solide Erklärung der MT-Welt. Es hat mir sehr geholfen, als ich ein MT-System entwickelte.

Sorantis
quelle
3
+1 gutes Buch. Und es ist Java Concurrency in der Praxis, nicht Action.
Talonx
8

Kapitel 11 des Buches Intel Threading Building Blocks von James Reinders widmet sich Beispielen für Algorithmen und Projekte, die Parallel Computing (oder Parallel Programming) verwenden: einen Teilstringsucher, das Game of Life, ein Sieb aus Eratosthenes, Matrix Multiply und dann andere weiterführende Themen wie Netzwerkpaketfilterung und Spiele.

Xavier Nodet
quelle
4

Ich fand Concurrent Programming unter Windows von Joe Duffy sehr hilfreich. Es gibt viel Tiefe. Es werden keine Schläge ausgeführt, sodass Sie wirklich ein gutes Gefühl dafür bekommen, wie viele Möglichkeiten es gibt, sich in den Fuß zu schießen. Es hat mir geholfen, vorsichtig zu sein. Dies ist der beste Rat, den ich jedem geben kann, der mit MT-Apps beginnt.

Scott Whitlock
quelle
2

Es gibt einen Unterschied zwischen Parallelität und Parallelität. Nebenläufigkeit ist der Vorgang, bei dem mehr als eine Sache gleichzeitig ausgeführt wird, z. B. das Schreiben in zwei Dateien. Parallelität ist die Beschleunigung von Programmen durch die Verwendung mehrerer Kerne.

Obwohl es kein kostenloses Mittagessen gibt, wenn es um Parallelität geht, wird das Mittagessen mit Sicherheit immer freier, siehe Entwicklungen wie http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

dan_waterworth
quelle
2
Ihre Unterscheidung ist falsch. Nebenläufigkeit ist der Vorgang, bei dem mehrere Aufgaben in überlappenden Zeiträumen ausgeführt werden und nicht notwendigerweise mehr als eine Aufgabe gleichzeitig ausgeführt wird . Parallelität ist die Handlung von mehr als einer Sache zu einem bestimmten Zeitpunkt.
Asad Saeeduddin
Wenn sie sich überschneiden, sind Sie dabei, mehr als eine Sache gleichzeitig zu tun.
Dan_waterworth
Wenn sich Start- und Endzeit überschneiden, bedeutet dies nicht, dass beide Aufgaben gleichzeitig ausgeführt werden. Bei zwei zu summierenden Listen mit ganzen Zahlen können Sie entweder zwei Personen veranlassen, jede Liste unabhängig und gleichzeitig zu summieren, was gleichzeitig und parallel ist, oder Sie können sich hinsetzen und abwechselnd die Einträge in einer Liste und die Einträge in der anderen Liste aufsummieren Liste, die gleichzeitig aber nicht parallel ist.
Asad Saeeduddin
Ich habe nicht gesagt, dass sie gleichzeitig stattfinden. Ich sagte, ich mache mehr als eine Sache gleichzeitig.
Dan_waterworth
Mehr als eine Sache gleichzeitig zu tun ist dasselbe wie zwei Dinge gleichzeitig zu tun. Wenn mehrere Dinge zu einem bestimmten Zeitpunkt auftreten, treten sie gleichzeitig auf.
Asad Saeeduddin
1

Diese Seite enthält einige gute Projektbeispiele im Allgemeinen. www.planet-source-code.com

Wählen Sie einfach eine Sprache und suchen Sie nach Multithreading. Sie sollten eine Reihe von Projekten mit verfügbarem Quellcode sehen.

Pemdas
quelle
Ich bin überrascht, dass dies noch nicht abgestimmt wurde. Dies ist die einzige Antwort, die ich gesehen habe und die sich auf die Frage konzentriert, wie man parallele und gleichzeitige Programmierung übt. Bei jeder anderen Antwort geht es um die Frage "Wie lerne ich die Konzepte?", Eine andere Frage.
Josiah