Как мне начать использовать многопоточное программирование? - PullRequest
12 голосов
/ 10 ноября 2009

Я новичок в переполнении стека. Я работаю на платформе Unix в C / C ++. Зная основы программирования в этом отношении, как я могу начать с многопоточности ?

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

Как я мог начать работу с многопоточностью и какие лучшие методики / книги / электронные книги / статьи доступны, чтобы схватить концепции как можно раньше?

Ответы [ 11 ]

8 голосов
/ 10 ноября 2009

Обучение многопоточному программированию состоит из двух частей:

  1. Как писать многопоточные приложения
  2. Как использовать доступный API (pthread)

Научиться многопоточному программированию сложнее, вот хорошая статья, опубликованная в Linux Journal , которая поможет вам понять основные принципы.

Чтобы лучше понять pThreads, я предлагаю прочитать этот урок - Программирование потоков POSIX

Есть также хорошая книга О'риелли под названием PThreads Programming

8 голосов
/ 10 ноября 2009

Изучите pthread, мьютексы и попробуйте реализовать то, что будет полезно для вас.

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

2 голосов
/ 10 ноября 2009

Если вы только начинаете работать с многопоточностью, я бы посоветовал сначала просмотреть и лучше понять операции ввода-вывода в вашей системе. Понимать блокирующий и неблокирующий ввод / вывод, сигнализацию, асинхронные процедуры, обратные вызовы и так далее. Ввод / вывод, вероятно, является одной из причин, если не основной причиной добавления многопоточности в ваши программы. Обладая этим знанием, вы можете взять книгу о pthreads или java-потоках, или обернуть свой ум вокруг библиотеки потоков Boost или другой библиотеки потоков для вашей любимой технологии.

1 голос
/ 14 ноября 2009

Я нашел этот учебник очень информативным и четко написанным. Надеюсь, что это полезно.

1 голос
/ 10 ноября 2009

Я думаю, что статья в Википедии Многопоточность даст вам краткий обзор и, перейдя по внешним ссылкам, вы получите хороший обзор темы. После этого - или дополнительно - вы можете прочитать Операционные системы Tanenbaum: разработка и внедрение (кстати, отличная книга). Но самое главное - на мой взгляд, - получить в свои руки это. Так что просто скачайте пример приложения с ... скажем The Code Project или любого другого сайта, который вы найдете и поиграйте с ним. Посмотрите, как отличается приложение, если вы используете блокировки, или что произойдет, если два потока попытаются получить доступ к одному и тому же ресурсу, и как часто это будет происходить и т. Д. Таким образом, я думаю, вы быстро освоитесь. И это интересно оценивать и играть с новыми для себя техниками.

0 голосов
/ 11 ноября 2009

Изучение различных библиотечных каркасов и средств O / S - хороший способ понять низкоуровневый параллелизм. Примеры, которые вы можете найти там, помогут вам начать писать параллельный код за короткое время.

После отладки нескольких тупиковых ситуаций и проблем с повреждением общей памяти вы обнаружите, что вам нужны некоторые инструменты для рассуждения и устранения проблем параллелизма. Мне лично нравится статья Херба Саттера Столпы параллелизма в качестве отправной точки. Идея состоит в том, чтобы лучше понять, почему вам нужен параллелизм. Вы ищете улучшенное время отклика, параллельные вычисления, комбинацию причин?

Понимание «почему» приведет вас к лучшему «что». Оттуда вы всегда можете перейти к различным низкоуровневым подходам: Активные объекты , объекты мониторинга , передача сообщений , и т. Д. . Как вы сказали, в этой области многое нужно знать.

0 голосов
/ 10 ноября 2009

поскольку это UNIX, почему бы не начать с процессов и IPC-коммуникаций? то есть очереди сообщений, разделяемая память и мьютексы.

0 голосов
/ 10 ноября 2009

Что-то еще, чтобы попробовать: http://www.threadingbuildingblocks.org

0 голосов
/ 10 ноября 2009

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

Вот книга " Основы многопоточного, параллельного и распределенного программирования ", которая связана с обсуждаемой темой и которую я хотел бы рекомендовать. Самым значительным его преимуществом является стиль «относительно легко читаемый», но нет жесткой связи с идеологией потоков POSIX (что является распространенной проблемой).

0 голосов
/ 10 ноября 2009

Если вы хотите изучить детали, попробуйте прочитать Расширенное программирование в среде UNIX . или начните с Компьютерные системы: взгляд программиста .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...