Шаблоны проектирования для многопоточности - программирование
Подтвердить что ты не робот

Шаблоны проектирования для многопоточности

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

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

4b9b3361

Ответ 1

Ссылка @WYSIWYG, похоже, содержит множество полезных шаблонов, но я могу дать вам некоторые рекомендации, которые следует соблюдать. Основным источником проблем с многопоточными программами являются операции обновления или одновременная модификация, а некоторые из менее встречающихся проблем - это голодание, мертвые блоки и т.д., Которые являются более смертоносными, если можно сказать, поэтому, чтобы избежать этих ситуаций, вы можете:

  • Используйте шаблон Неизменяемый объект, если объект не может быть изменен после создания, то вы не можете иметь нескоординированные обновления и как мы знаем, что сама операция создания гарантированно будет атомой JVM в вашем случае.
  • Принцип разделения запросов в команде: это отдельный код, который изменяет объект из кода, который их читает, потому что чтение может происходить одновременно, но изменение не может.
  • Воспользуйтесь огромными преимуществами функций языка и библиотеки, которые вы используете, таких как параллельные списки и структуры потоков, потому что они хорошо разработаны и имеют хорошую производительность.
  • Есть книга (хотя и старая), но с очень хорошими проектами для таких систем, он называется Параллельное программирование в Java.

Ответ 2

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

  • Пользовательская потоковая библиотека..Net java, С++ имеют свои собственные потокобезопасные библиотеки. Используй их. Не пытайтесь создавать свои собственные структуры данных.

  • Если вы используете .Net, попробуйте задачу вместо потоков. Они более логичны и безопасны.

Вы можете посмотреть список некоторых Concurrency связанных шаблонов

http://www.cs.wustl.edu/~schmidt/patterns-ace.html