Какие есть хорошие ресурсы для изучения многопоточного программирования?
С появлением многоядерных процессоров на настольных компьютерах навыки многопоточности станут ценным активом для программистов. Можете ли вы порекомендовать хорошие ресурсы (книги, руководства, веб-сайты и т. Д.) Для программиста, который хочет узнать о многопоточном программировании?
Ответов (17)17
Взгляните на книгу Херба Саттера « Бесплатный обед закончился », а затем на его серию статей об эффективном параллелизме .
http://www.cilk.com/multicore-e-book/
Это хороший общий обзор ситуации, если вы ищете учебные пособия и книги, возможно, лучше всего будет указать язык в качестве отправной точки, чтобы вы могли возиться с некоторым кодом.
Я прочитал (большую часть) Java Concurrency in Practice Брайана Гетца, и это очень хорошо.
Очевидно, что в книге проходит тема на основе Java (с использованием специфичных для Java реализаций потоков, блокировок и т. Д.), Но практически все принципы могут быть применены к другим языкам.
Домашняя страница автора содержит список написанных им статей , некоторые из которых включают материалы, связанные с потоками. Может быть, начни с этого и, если тебе нравится его стиль, купи книгу.
Я, честно говоря, никогда не читал ее, но « Параллельное программирование на Java» - это книга, которую я слышал и рекомендовали несколько человек.
Язык программирования Erlang обеспечивает простой в использовании стиль параллельного программирования. Возможно, вы никогда не будете использовать Erlang, но его концепции можно перенести на другие языки. Возможно, вы захотите прочитать книгу Программирование на Erlang: программное обеспечение для параллельного мира .
Поклонники функционального программирования утверждают, что ничего нового изучать не нужно. Просто используйте чистый функциональный язык, и компилятор или интерпретатор автоматически все распараллелит. Так что вы можете захотеть изучить Haskell, OCaml или другой функциональный язык.
Я не знаю, что именно вы ищете, но если вы занимаетесь разработкой WindowsForms, каждую минуту стоит читать следующее сообщение в блоге: WinForms UI Thread Invokes: углубленный обзор Invoke / BeginInvoke / InvokeRequred
В качестве отличного руководства и справочника по программированию параллелизма на C# (или .NET в целом) я бы порекомендовал MSDN « Что должен знать каждый разработчик о многопоточных приложениях » Вэнса Моррисона на MSDN. Он содержит много полезной информации и предостережений в отношении многопоточной разработки.
Я думаю, что Boost.Threads - отличная библиотека параллелизма C++ для изучения, особенно если вы просто хотите начать писать многопоточные приложения. Код очень краткий и простой для понимания, плюс следующий стандарт C++, вероятно, будет включать библиотеку потоков, основанную на Boost.Threads (учебник: http://www.ddj.com/cpp/184401518 )
Если вы хотите попробовать выполнить высокопараллельную версию простой задачи или увидеть реальные решения, вы можете сделать хуже, чем посмотреть на проект широкого поиска . В основном речь идет о том, как эффективно выполнять параллельное сопоставление регулярных выражений файлов журнала, но при этом стараться добавить как можно меньше кода.
Участники представили решения на разных языках, и результаты их работы опубликованы. Первоначальный проект теперь завершен, и теперь за него берется Wide Finder 2 .
CodingHorror дает хорошее введение в широкий поиск .
Я рекомендую книгу The Art of Multiprocessor Programming для богатого, тщательного изучения предмета с хорошим балансом между информатикой и практикой . Многие примеры находятся в объектно-ориентированном коде, то есть на Java, с другими языками, разбросанными повсюду. Это просто зависит от обсуждаемой темы. Что мне действительно нравится в этой книге, так это то, что в ней обсуждается, как общие алгоритмы должны быть реализованы в параллельной разработке. Конечно, есть еще много всего!
Что касается общих концепций и обработки потоков pthread, мне очень нравится программирование с помощью потоков POSIX . Будучи библиотекой и API, он находится на C.
Для разработчиков Windows и C# посетите блог Джо Даффи . Джо работает над параллельными библиотеками, инфраструктурой и моделями программирования в отделе разработчиков Microsoft. В ноябре 2008 года у него выходит книга под названием « Параллельное программирование в Windows» ( ссылка на Amazon ).
Также не пропустите блог Крестного отца: Саттерз Милл Херба Саттера . У него есть ссылки на все его статьи в журнале доктора Добба и многое другое. Щелкните его категорию параллелизма .
На сайтах производителей процессоров есть интересный контент:
http://developer.amd.com/documentation/articles/Pages/default.aspx#parallel
http://software.intel.com/en-us/multi-core
Также в библиотеке потоков с открытым исходным кодом Intel есть несколько хороших ссылок:
Я пишу о многопоточности и параллелизме в 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#, потому что вы можете загрузить код с забавными примерами, которые используют ваш многоядерный компьютер. Книга представляет собой хорошее руководство с большим количеством кода для практики. Он рассказывает истории и объясняет самые сложные концепции.