Какие есть хорошие ресурсы для изучения многопоточного программирования?

С появлением многоядерных процессоров на настольных компьютерах навыки многопоточности станут ценным активом для программистов. Можете ли вы порекомендовать хорошие ресурсы (книги, руководства, веб-сайты и т. Д.) Для программиста, который хочет узнать о многопоточном программировании?

Ответов (17)

Решение

Взгляните на книгу Херба Саттера « Бесплатный обед закончился », а затем на его серию статей об эффективном параллелизме .

http://www.cilk.com/multicore-e-book/

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

Я прочитал (большую часть) Java Concurrency in Practice Брайана Гетца, и это очень хорошо.

Очевидно, что в книге проходит тема на основе Java (с использованием специфичных для Java реализаций потоков, блокировок и т. Д.), Но практически все принципы могут быть применены к другим языкам.

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

Это специфично для Delphi, но нет причин, по которым эта концепция не применима ни к одному другому языку!

Учебное пособие по многопоточности

Я, честно говоря, никогда не читал ее, но « Параллельное программирование на Java» - это книга, которую я слышал и рекомендовали несколько человек.

Язык программирования Erlang обеспечивает простой в использовании стиль параллельного программирования. Возможно, вы никогда не будете использовать Erlang, но его концепции можно перенести на другие языки. Возможно, вы захотите прочитать книгу Программирование на Erlang: программное обеспечение для параллельного мира .

Поклонники функционального программирования утверждают, что ничего нового изучать не нужно. Просто используйте чистый функциональный язык, и компилятор или интерпретатор автоматически все распараллелит. Так что вы можете захотеть изучить Haskell, OCaml или другой функциональный язык.

Джозеф Альбахари написал здесь хороший обзор Threading в C#:

http://www.albahari.com/threading/

Я не знаю, что именно вы ищете, но если вы занимаетесь разработкой WindowsForms, каждую минуту стоит читать следующее сообщение в блоге: WinForms UI Thread Invokes: углубленный обзор Invoke / BeginInvoke / InvokeRequred

В качестве отличного руководства и справочника по программированию параллелизма на C# (или .NET в целом) я бы порекомендовал MSDN « Что должен знать каждый разработчик о многопоточных приложениях » Вэнса Моррисона на MSDN. Он содержит много полезной информации и предостережений в отношении многопоточной разработки.

Я думаю, что Boost.Threads - отличная библиотека параллелизма C++ для изучения, особенно если вы просто хотите начать писать многопоточные приложения. Код очень краткий и простой для понимания, плюс следующий стандарт C++, вероятно, будет включать библиотеку потоков, основанную на Boost.Threads (учебник: http://www.ddj.com/cpp/184401518 )

http://www.yoda.arachsys.com/csharp/threads/

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

Участники представили решения на разных языках, и результаты их работы опубликованы. Первоначальный проект теперь завершен, и теперь за него берется Wide Finder 2 .

CodingHorror дает хорошее введение в широкий поиск .

Я рекомендую книгу The Art of Multiprocessor Programming для богатого, тщательного изучения предмета с хорошим балансом между информатикой и практикой . Многие примеры находятся в объектно-ориентированном коде, то есть на Java, с другими языками, разбросанными повсюду. Это просто зависит от обсуждаемой темы. Что мне действительно нравится в этой книге, так это то, что в ней обсуждается, как общие алгоритмы должны быть реализованы в параллельной разработке. Конечно, есть еще много всего!

Что касается общих концепций и обработки потоков pthread, мне очень нравится программирование с помощью потоков POSIX . Будучи библиотекой и API, он находится на C.

Для разработчиков Windows и C# посетите блог Джо Даффи . Джо работает над параллельными библиотеками, инфраструктурой и моделями программирования в отделе разработчиков Microsoft. В ноябре 2008 года у него выходит книга под названием « Параллельное программирование в Windows» ( ссылка на Amazon ).

Также не пропустите блог Крестного отца: Саттерз Милл Херба Саттера . У него есть ссылки на все его статьи в журнале доктора Добба и многое другое. Щелкните его категорию параллелизма .

Я веду блог ссылок на статьи, блоги и проекты о параллелизме по адресу:

http://concurrency.tumblr.com

Обычно я публикую одну или две ссылки в день по разным темам (потоки, акторы, блокировка, параллельное программирование) в различных средах (Erlang, Java, Scala, .NET, C++, Ruby, Python и т. Д.).

На сайтах производителей процессоров есть интересный контент:

http://developer.amd.com/documentation/articles/Pages/default.aspx#parallel

http://software.intel.com/en-us/multi-core

Также в библиотеке потоков с открытым исходным кодом Intel есть несколько хороших ссылок:

http://www.threadingbuildingblocks.org/

Я пишу о многопоточности и параллелизме в C++ в своем блоге . Я также пишу книгу о параллелизме в C++: C++ Concurrency in Action .

Если вы работаете с C#, книга "Многопоточное программирование на C# 2008 и 2005" Гастона К. Хиллара - Packt Publishing - http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and- 2005-thread-programming / книга , поможет вам. Настоятельно рекомендуется для программистов на C#, потому что вы можете загрузить код с забавными примерами, которые используют ваш многоядерный компьютер. Книга представляет собой хорошее руководство с большим количеством кода для практики. Он рассказывает истории и объясняет самые сложные концепции.