С появлением многоядерных процессоров на настольных компьютерах навыки многопоточности станут ценным активом для программистов. Можете ли вы порекомендовать хорошие ресурсы (книги, учебные пособия, веб-сайты и т. Д.) Для программиста, который хочет узнать о многопоточном программировании?
Взгляните на книгу Херба Саттера « Бесплатный обед окончен », а затем на его серию статей « Эффективный параллелизм» .
Я, честно говоря, никогда не читал его сам, но параллельное программирование на Java - это книга, которую я слышал и которую рекомендовали несколько человек.
http://www.cilk.com/multicore-e-book/
Это хороший общий обзор ситуации, если вы ищете учебники и книги, лучше всего указать язык в качестве отправной точки, чтобы вы могли поиграться с некоторым кодом.
Язык программирования Erlang обеспечивает простой в использовании стиль параллельного программирования. Вы можете никогда не использовать Erlang, но концепции переносимы на другие языки. Возможно, вы захотите прочитать книгу « Программирование на Erlang: программное обеспечение для параллельного мира» .
Любители функционального программирования утверждают, что нет необходимости изучать что-то новое. Просто используйте чистый функциональный язык, и компилятор или интерпретатор автоматически распараллелит все. Поэтому вы можете изучать Haskell, OCaml или другой функциональный язык.
Джозеф Албахари написал хороший обзор Threading в C # здесь:
Я прочитал (большую часть) Java Concurrency in Practice Брайана Гетца, что очень хорошо.
Очевидно, что в книге проходит тема, основанная на Java (использующая специфические для Java реализации потоков, блокировок и т. Д.), Но почти все принципы могут быть применены к другим языкам.
Домашняя страница автора содержит список статей, которые он написал, некоторые из которых включают в себя темы, связанные с потоками. Может быть, начать там, и если вам нравится его стиль, купить книгу.
Для отличного руководства и справочника по параллельному программированию в C # (или .NET в целом) я бы порекомендовал статью MSDN « Что должен знать каждый разработчик» о многопоточных приложениях Vance Morrison на MSDN. Он содержит много полезной информации и предупреждений о многопоточной разработке.
Я не знаю, что именно вы ищете, но если вы занимаетесь разработкой для WindowsForms, то стоит постить каждую минуту в следующем блоге: Тема WinForms UI вызывает: углубленный обзор Invoke / BeginInvoke / InvokeRequred
Я думаю, Boost.Threads - это отличная библиотека параллелизма на C ++ для изучения, особенно если вы просто хотите начать писать многопоточные приложения. Код очень лаконичен и прост для понимания, плюс следующий стандарт C ++, вероятно, будет включать в себя библиотеку потоков, основанную на Boost.Threads (учебное пособие: http://www.ddj.com/cpp/184401518 ).
Если вы хотите попробовать выполнить параллельную версию простой задачи или увидеть реальные решения, вы можете сделать хуже, чем посмотреть на проект с широкими возможностями поиска . По сути, речь идет о том, как эффективно выполнять параллельное сопоставление регулярных выражений файлов журналов, но при этом стараться добавлять как можно меньше кода.
Участники представили решения на разных языках, и результаты работы публикуются. Первоначальный проект уже завершен, и в настоящее время в работе находится широкий поисковик 2 .
CodingHorror имеет хорошее введение в широкий поиск .
Для богатого, тщательного изучения предмета, с хорошим балансом между информатикой и практикой, я рекомендую «Искусство многопроцессорного программирования» . Множество примеров приведено в объектно-ориентированном коде, то есть Java, с разбросанными по всему миру другими языками. Это зависит только от темы, которая будет охвачена. Что мне действительно нравится в этой книге, так это то, что в ней обсуждается, как общие алгоритмы должны быть реализованы в параллельном проекте. Конечно, есть намного больше!
Для общих понятий и обработки pthreads мне действительно нравится Программирование с потоками POSIX . Будучи библиотекой и API, что это такое, это на C.
Для разработчиков Windows и C #, посмотрите блог Джо Даффи . Джо работает над параллельными библиотеками, инфраструктурой и моделями программирования в отделе разработчиков Microsoft. В ноябре 2008 года вышла книга под названием « Параллельное программирование в Windows» ( ссылка на Amazon ).
Кроме того, не пропустите блог Крестного отца: Мельница Саттера Херба Саттера . У него есть ссылки на все его статьи в журнале доктора Добба и многое другое. Нажмите на его категорию параллелизма .
Я веду linkblog для статей о параллелизме, блогов и проектов по адресу:
Обычно я публикую одну или две ссылки в день на различные темы (темы, актеры, блокировка, параллельное программирование) в различных средах (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 есть несколько хороших ссылок:
Это специфично для Delphi, но нет причин, по которым концепция не будет применяться ни к какому другому языку!
Я пишу о многопоточности и параллелизме в C ++ в своем блоге . Я также пишу книгу о параллелизме в C ++: C ++ Concurrency in Action .
Если вы работаете с C #, книга «Потоковое программирование на C # 2008 и 2005» Гастона С. Хиллара - Packt Publishing - http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and- 2005-нитка-программирование / книга , поможет вам. Настоятельно рекомендуется для программистов C #, потому что вы можете скачать код с забавными примерами, которые используют ваш многоядерный компьютер. Книга является хорошим руководством с большим количеством кода для практики. Он рассказывает истории, в то время как он объясняет самые сложные концепции.