Как бы вы практиковали параллелизм и многопоточность? [закрыто]

33

Я читал о параллелизме, многопоточности и о том, как «бесплатный обед закончился» . Но у меня еще не было возможности использовать МТ в своей работе.

Таким образом, я ищу предложения о том, что я мог бы сделать, чтобы получить некоторую практику CPU MT с помощью упражнений или участия в некоторых проектах с открытым кодом.

Спасибо.

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

Ксавье Ноде
источник
1
Возможный
5
Q: Как бы вы практиковали параллелизм и многопоточность? A: жонглирование
Стивен А. Лоу
@ Стивен: Не так далеко, правда.
Роберт Харви
Ссылка «бесплатный обед окончен» устарела
пользователь
Должно быть хорошо сейчас ...
Ксавьер Нодет

Ответы:

15

Статья Джозефа Албахари о Threading в C # - один из лучших ресурсов, которые я видел.

Содержание ниже. Обратите внимание, что некоторые темы, такие как Task Parallel Library, специфичны для .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 # к вашему ответу: 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 Concurrency in Practice - одна из лучших книг о многопоточности и параллелизме. Хотя все примеры в книге основаны на Java, эта книга дает четкое объяснение мира МТ. Это очень помогло мне, когда я разрабатывал систему MT.

Sorantis
источник
3
+1 хорошая книга. И это на практике параллелизм Java, а не действие.
talonx
8

Глава 11 книги Intel Threading Building Blocks Джеймса Рейндерса посвящена примерам алгоритмов и проектов, в которых используются параллельные вычисления (или параллельное программирование): искатель подстрок, Игра жизни, Сито Эратосфена, Матричное умножение и затем другие более сложные темы, такие как фильтрация сетевых пакетов и игры.

Ксавье Ноде
источник
4

Я нашел параллельное программирование на Windows Джо Даффи очень полезным. Там много глубины. Это не дает никаких ударов, так что вы действительно почувствуете, как много способов выстрелить себе в ногу. Это помогло мне быть осторожным, и это лучший совет, который я могу дать всем, кто начинает работать с приложениями MT.

Скотт Уитлок
источник
2

Есть разница между параллелизмом и параллелизмом. Параллелизм - это процесс выполнения более чем одной операции одновременно, например, запись в 2 файла. Параллелизм - это процесс ускорения программ за счет использования нескольких ядер.

Хотя бесплатного параллельного обеда не существует, в параллелизме обед, безусловно, становится более бесплатным, см. Такие события, как http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

dan_waterworth
источник
2
Ваше различие неверно. Параллелизм - это процесс выполнения нескольких задач в перекрывающиеся периоды времени, при этом необязательно делать более одной вещи в любой момент времени . Параллелизм - это действие, делающее более чем одну вещь в любой момент времени.
Асад Саидуддин
Если они пересекаются, вы делаете больше, чем одно за раз.
dan_waterworth
Если их время начала и окончания перекрываются, это не означает, что обе задачи выполняются одновременно в любой момент времени. Имея два списка целых чисел для суммирования, вы можете получить два человека для суммирования каждого списка независимо и одновременно, что является одновременно и параллельным, или параллельным, или вы можете сесть и чередовать суммирование записей в одном списке и записей в другом список, который является параллельным, но не параллельным.
Асад Саидуддин
Я не говорил, что они происходили одновременно. Я сказал, что делаю больше, чем одну вещь одновременно.
dan_waterworth
Делать более чем одну вещь одновременно - это то же самое, что делать две вещи одновременно. Если несколько вещей происходят в данный момент времени, они происходят одновременно.
Асад Саидуддин
1

Этот сайт имеет несколько хороших примеров проектов в целом. www.planet-source-code.com

Просто выберите язык и ищите многопоточность. Вы должны увидеть несколько проектов с исходным кодом.

Pemdas
источник
Я удивлен, что за это еще не проголосовали. Это единственный ответ, который я увидел, и который сосредоточен на вопросе «как практиковать параллельное и параллельное программирование». Каждый другой ответ касается вопроса «как выучить понятия», который является другим вопросом.
Иосия