web-dev-qa-db-ja.com

マルチスレッドの設計パターン

マルチタスクは、共有プロジェクトが複数のスレッドによってアクセスされていると言って、共有ミューテーションが原因で大きなプロジェクトがクラッシュするときに、惨事になるようです。バグの原因とその原因をデバッグおよび追跡することは非常に困難になります。 multithreadedプログラムを設計するときに使用できる設計パターンはありますか?

これについてのあなたの見解とコメントに本当に感謝します。誰かが私たちのプログラムをスレッドセーフにするために従うことができる優れた設計実践を提示できれば、それは大きな助けになるでしょう。

21
Ankit Zalani

@WYSIWYGリンクには便利なパターンが豊富にあるようですが、従うべきガイドラインをいくつか紹介します。マルチスレッドプログラムの問題の主な原因は、更新操作または同時変更です。発生頻度の低い問題のいくつかは、Starvation、Deadlocksなどです。

  • Immutable Object パターンを使用します。オブジェクトが作成後に変更できない場合、調整されていない更新を行うことはできません。作成操作自体は、JVMによってアトミックであることが保証されています。あなたの場合。
  • Command Query Segregation Principle :読み取りは同時に実行できるが変更はできないため、オブジェクトを読み取るコードからオブジェクトを変更する別のコードです。
  • コンカレントリストやスレッド構造など、使用している言語やライブラリの機能を十分に活用してください。
  • 本があります(古いものですが)しかし、そのようなシステムに非常に優れた設計では、それは Javaでの並行プログラミング と呼ばれます=。
9
Ibrahim Najjar

デザインパターンは、特定の問題を解決するために使用されます。デッドロックを避けてデバッグを増やしたい場合は、いくつかの注意事項と注意事項があります

  1. ユーザースレッドセーフライブラリ。 .Net Java、C++には独自のスレッドセーフライブラリがあります。それらを使用してください。独自のデータ構造を作成しようとしないでください。

  2. .Netを使用している場合は、スレッドの代わりにタスクを試してください。彼らはより論理的で安全です。

あなたはいくつかの並行性関連のパターンのリストを見たいかもしれません

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

1
om471987