Jak ćwiczysz współbieżność i wielowątkowość? [Zamknięte]

33

Czytałem o współbieżności, wielowątkowości i o tym, jak „minął bezpłatny lunch” . Ale nie miałem jeszcze możliwości korzystania z MT w mojej pracy.

W związku z tym szukam sugestii na temat tego, co mogę zrobić, aby poćwiczyć procesor ciężki MT poprzez ćwiczenia lub udział w niektórych projektach typu open source.

Dzięki.

Edycja: Bardziej interesują mnie projekty typu open source, które używają MT do zadań związanych z procesorem, lub po prostu algorytmy, które są interesujące do wdrożenia przy użyciu MT, a nie książki lub dokumenty opisujące tylko takie narzędzia, jak wątki, muteksy i blokady, lub w jaki sposób można wykorzystać MT, aby mieć responsywne GUI ...

Xavier Nodet
źródło
1
Prawdopodobnie interesujące: programmers.stackexchange.com/questions/24936/…
Orbling
5
P: Jak ćwiczysz współbieżność i wielowątkowość? Odp .: żonglując
Steven A. Lowe
@Steven: Naprawdę nie tak daleko.
Robert Harvey
Link „darmowy lunch się skończył” nie działa
użytkownik
Teraz powinno być dobrze ...
Xavier Nodet

Odpowiedzi:

15

Artykuł Josepha Albahari na temat wątków w C # jest jednym z najlepszych zasobów, jakie widziałem.

Spis treści znajduje się poniżej. Należy pamiętać, że niektóre tematy, takie jak Biblioteka zadań równoległych, są specyficzne dla platformy .NET, ale wiele z nich dotyczy innych języków, zwłaszcza Java.

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

Możesz również obejrzeć samouczek Jona Skeeta tutaj: http://www.yoda.arachsys.com/csharp/threads/

Robert Harvey
źródło
3
Dodam stronę Jona Skeeta do c # mutlithreading do twojej odpowiedzi: yoda.arachsys.com/csharp/threads
1
Po drugie, bardzo mi się podobało 5 rozdziałów Albahari. Aby ćwiczyć, oto proste ćwiczenie - Utwórz grę wieloosobową w kółko i krzyżyk za pomocą WCF (jeśli wiesz), a także prosty interfejs użytkownika - spróbuj zaktualizować elementy sterujące interfejsu użytkownika odpowiedziami każdego gracza. Czy sprawdziłeś kod firefox?
Narayana
czy mógłbyś wyjaśnić więcej na temat tego, co robi i dlaczego polecasz to jako odpowiedź na zadane pytanie? „Tylko odpowiedzi” nie są mile widziane na Stack Exchange
gnat
1
@gnat: Wkleiłem spis treści do mojej odpowiedzi.
Robert Harvey
Link do samouczka Jona Skeeta nie działał (otrzymywałem stronę platformy Azure 404) - oto jej archiwum: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare
13

Java Concurrency in Practice to jedna z najlepszych książek o wielowątkowości i współbieżności. Chociaż wszystkie przykłady w tej książce są oparte na Javie, książka ta daje solidne wyjaśnienie świata MT. Bardzo mi pomogło, gdy tworzyłem system MT.

Sorantis
źródło
3
+1 dobra książka. I to jest Java Concurrency in Practice, a nie Action.
talonx,
8

Rozdział 11 książki Intel Threading Building Blocks autorstwa Jamesa Reindersa poświęcony jest przykładom algorytmów i projektów wykorzystujących obliczenia równoległe (lub programowanie równoległe): wyszukiwarka substringów, gra w życie, sito Eratostenesa, mnożenie macierzy i następnie inne bardziej zaawansowane tematy, takie jak filtrowanie pakietów sieciowych i gry.

Xavier Nodet
źródło
4

Uważam, że programowanie współbieżne w systemie Windows autorstwa Joe Duffy'ego jest bardzo pomocne. Jest dużo głębi. Nie naciska żadnych ciosów, więc naprawdę dobrze czujesz, ile jest sposobów, aby strzelić sobie w stopę. Pomogło mi to zachować ostrożność, co jest najlepszą radą, jaką mogę dać każdemu, kto zaczyna od aplikacji MT.

Scott Whitlock
źródło
2

Istnieje różnica między współbieżnością a równoległością. Współbieżność polega na robieniu więcej niż jednej rzeczy naraz, na przykład pisaniu do 2 plików. Równoległość polega na przyspieszaniu programów za pomocą wielu rdzeni.

Chociaż nie ma darmowego lunchu, jeśli chodzi o współbieżność, równolegle lunch z pewnością staje się coraz bardziej darmowy, zobacz rozwój, taki jak http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

dan_waterworth
źródło
2
Twoje rozróżnienie jest nieprawidłowe. Współbieżność to czynność polegająca na wykonywaniu wielu zadań w nakładających się okresach , niekoniecznie przy jednoczesnym wykonywaniu więcej niż jednej rzeczy . Równoległość to czynność robienia więcej niż jednej rzeczy w danym momencie.
Asad Saeeduddin
Jeśli się pokrywają, jesteś w trakcie robienia więcej niż jednej rzeczy naraz.
dan_waterworth
Jeśli czasy rozpoczęcia i zakończenia pokrywają się, nie oznacza to, że oba zadania przebiegają jednocześnie w danym momencie. Biorąc pod uwagę dwie listy liczb całkowitych do zsumowania, możesz poprosić dwie osoby o sumowanie każdej listy niezależnie i jednocześnie, co jest jednocześnie i równoległe, lub możesz usiąść i na przemian sumować wpisy na jednej liście i wpisy na drugiej lista, która jest zbieżna, ale nie równoległa.
Asad Saeeduddin
Nie powiedziałem, że dzieją się jednocześnie. Powiedziałem, że robię więcej niż jedną rzecz na raz.
dan_waterworth
Robienie więcej niż jednej rzeczy naraz jest równoznaczne z robieniem dwóch rzeczy jednocześnie. Jeśli w danym momencie występuje wiele rzeczy, występują one jednocześnie.
Asad Saeeduddin
1

Ta strona zawiera ogólnie kilka dobrych projektów. www.planet-source-code.com

Wystarczy wybrać język i wyszukać wielowątkowość. powinieneś zobaczyć wiele projektów z dostępnym kodem źródłowym.

Pemda
źródło
Dziwi mnie, że nie zostało to jeszcze ocenione. To jedyna odpowiedź, jaką widziałem, która koncentruje się na pytaniu „jak PRAKTYKA programować równolegle i równolegle”. Każda inna odpowiedź dotyczy pytania „jak uczyć się pojęć”, które jest innym pytaniem.
Josiah