Примеры задач для многопоточности - PullRequest
6 голосов
/ 15 января 2009

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

Итак, я хочу начать с малого. Какие проблемы практики на разных уровнях сложности могут быть полезны для практики многопоточности? (И не надуманные, непрактичные примеры, которые вы видите в книгах, не посвященных параллелизму).

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

(Я бы предпочел не фокусироваться на проблеме, которую хочу решить. Я просто хочу попросить хорошие ссылки и примеры проблем. Это было бы более полезно для других пользователей. по проблеме.)

Ответы [ 7 ]

3 голосов
/ 21 августа 2009

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

2 голосов
/ 15 января 2009

Полностью игнорируя ваш запрос, я предлагаю вам взглянуть на SEDA (поэтапная событийно-ориентированная архитектура) как способ подумать о настройке многопоточного конвейера производителей и потребителей.

2 голосов
/ 15 января 2009

Если у вас есть достаточно времени, чтобы инвестировать, я бы порекомендовал книгу Джеффа Маги и Джеффа Крамера "Джон Вили и сыновья" 2006 года "100. *

Вы можете игнорировать часть Java, если используете другой язык

Существует язык, используемый для моделирования процессов и параллельных процессов, который называется FSP. Чтобы овладеть языком, нужно потратить время и энергию. Есть инструмент (LTSA, оба бесплатны и поддерживаются плагином Eclipse или автономным приложением), который проверяет ваши модели и дает вам уверенность, что ваша модель верна с точки зрения одновременного выполнения.

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

2 голосов
/ 15 января 2009

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

Я несколько раз видел ситуации, когда необходимо избегать тупиковых ситуаций, и применяются меры по предотвращению тупиковых ситуаций. Всегда полезно проанализировать, подойдет ли алгоритм Банкира этому случаю.

1 голос
/ 15 января 2009

Если вы вообще работаете с Java (и, возможно, даже если нет), вам обязательно следует прочитать Параллелизм Java на практике .

1 голос
/ 15 января 2009

Я не уверен, что вы ищете. Но в реальной корпоративной ситуации мы обычно используем какую-то систему обмена сообщениями, когда работаем с потребителями. Обычно в Java это JMS . И вы можете использовать превосходную Spring Framework , чтобы помочь вам в этом.

0 голосов
/ 15 января 2009

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

На самом деле, я бы сказал, что если вы реализуете (или находите) сплошной (и универсальный) кольцевой буфер, а затем запускаете всю межпотоковую связь через эти буферы в качестве единственной точки контакта, это покроет очень большая часть любой многопоточной синхронизации, которая вам может понадобиться. (Если вы не работаете в среде, совместимой с модными словечками, и вам не нужно добавлять в список модных слов «предприятие», «обмен сообщениями» или что-то еще ... или вы пишете базу данных или операционную систему.)

(Обратите внимание, что «циклический буфер» является довольно C-центричным термином, корнем которого является относительно прямое манипулирование блоком памяти. Класс Queue в Python реализует тот же базовый принцип в виде списка, и я уверен, что многие другие языки имеют концептуально похожие конструкции под немного другими именами ...)

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