Як би ви практикували паралельність і багатопотоковість? [зачинено]


33

Я читав про паралельність, багатопотоковість та про те, як "безкоштовний обід закінчився" . Але я ще не мав можливості використовувати MT у своїй роботі.

Таким чином, я шукаю пропозиції щодо того, що б я міг зробити, щоб отримати певну практику роботи з важкими МТ процесора через навчання або участь у деяких проектах з відкритим кодом.

Спасибі.

Редагувати: Мене більше цікавлять проекти з відкритим кодом, які використовують MT для завдань, пов'язаних з процесором, або просто алгоритми, які цікаво реалізувати за допомогою MT, а не книги або папери, які описують лише інструменти, такі як потоки, мютекси та блокування, або як МТ можна використовувати, щоб мати адаптивний графічний інтерфейс ...



5
З: Як би ви практикували паралельність і багатопотоковість? A: шляхом жонглювання
Стівен А. Лоу

@Steven: Не так вже й далеко.
Роберт Харві

Посилання "Безкоштовний обід закінчений" мертве
користувач

Має бути зараз нормально ...
Ксав'є Нодет

Відповіді:


15

Стаття Джозефа Альбахарі про " Threading in C #" - один з найкращих ресурсів, які я бачив.

Зміст наведено нижче. Зауважте, що деякі теми, як-от Бібліотека паралельних завдань, притаманні лише .NET, але значна частина цього стосується інших мов, особливо 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

Ви також можете подивитися підручник Джона Скета тут: http://www.yoda.arachsys.com/csharp/threads/


3
Я додаю сторінку c # mutlithreading для Джон Скіта до вашої відповіді: yoda.arachsys.com/csharp/threads

1
По-друге, дуже сподобалися 5 глав Альбахарі. На практиці ось проста вправа - Створіть багатокористувацьку гру з тиком-носками за допомогою WCF (якщо ви знаєте) та простий інтерфейс користувача - спробуйте оновити елементи керування інтерфейсом відповідями кожного гравця. Ви перевірили код firefox?
Нараяна

Ви б не хотіли пояснити детальніше про те, що це робить, і чому ви рекомендуєте це відповісти на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на Stack Exchange
gnat

1
@gnat: Я вклав зміст у свою відповідь.
Роберт Харві

Посилання на підручник Джона Скіта, здається, не працює (я отримував сторінку Azure 404) - ось його архів: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare

13

Конкурс Java на практиці - одна з найкращих книг про багатопотоковість та паралельність. Хоча всі приклади в книзі засновані на Java, ця книга дає ґрунтовне пояснення MT світу. Це мені дуже допомогло, коли я розробляв систему МТ.


3
+1 хороша книга. І це Java Concurrency на практиці, а не в дії.
талонкс

8

Розділ 11 книги " Блокування будівельних блоків Intel" від Джеймса Рейндерса присвячений прикладам алгоритмів та проектів, які використовують паралельне обчислення (або паралельне програмування): пошук підрядків, Гра життя, Сито Ератостена, Матричне множення та а потім інші більш досконалі теми, такі як фільтрація мережевих пакетів та ігри.


4

Я вважаю, що одночасне програмування у Windows від Джо Даффі дуже корисне. Там дуже багато глибини. Це не тягне жодних ударів, тож ви справді відчуваєте, як багато способів стріляти собі в ногу. Це допомогло мені бути обережними, що є найкращою порадою, яку я можу дати кожному, починаючи з програм MT.


2

Існує різниця між паралельністю і паралелізмом. Паралельність - це вчинок одночасно, як запис у два файли. Паралелізм - акт прискорення програм за допомогою декількох ядер.

Хоча немає безкоштовного обіду, коли мова йде про паралельність, то паралелізм, звичайно, стає більш вільним, дивіться події, як-от http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


2
Ваша відмінність невірна. Паралельність - це акт виконання декількох завдань у певні часові періоди , не обов'язково виконуючи більше ніж одну річ у будь-який момент часу . Паралелізм - це акт робити більше ніж одну річ у будь-який момент часу.
Асад Саєдюддін

Якщо вони перетинаються, ви перебуваєте одночасно за кількома справами.
dan_waterworth

Якщо час їх початку та закінчення перетинається, це не означає, що обидва завдання виконуються одночасно в будь-який момент часу. З урахуванням двох списків цілих чисел для підведення підсумків, або ви можете отримати двох людей, щоб підсумовувати кожен список незалежно і одночасно, що є одночасно і паралельно, або ви можете сісти і чергувати між підбиттям підсумків в одному списку та записами в іншому список, який є паралельним, але не паралельним.
Asad Saeeduddin

Я не сказав, що вони відбуваються одночасно. Я сказав, що роблю більше, ніж одне.
dan_waterworth

Робити більше ніж одну річ одночасно - це те саме, що робити дві речі одночасно. Якщо в даний момент відбувається багато речей, вони відбуваються одночасно.
Асад Саєдюддін

1

На цьому сайті є декілька хороших прикладів проекту загалом. www.planet-source-code.com

Просто виберіть мову та шукайте багатопотокові. ви повинні побачити ряд проектів із вихідним кодом.


Я здивований, що це ще не було проголосовано. Це єдина відповідь, яку я бачив, і присвячена питанню "як ПРАКТИЧНО паралельно та паралельно програмувати". Кожна інша відповідь стосується питання "як засвоїти поняття", що є іншим питанням.
Йосія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.