Javaでの並行性について学ぶためのプログラムまたは小規模プロジェクトへの提案はありますか? [閉まっている]
-
03-07-2019 - |
質問
Javaの並行性について学ぶことを目指しています。現在、私の知識の状態は貧弱です。 「揮発性」とは何かを知っていると確信しています。手段。何が「同期」したのかを知っています手段。時々。スレッドを開始したり、スレッドを管理したりするコードを書いたことはありません。この問題以外では、自信を持って自宅でJavaで作業しています。
正確かつ効率的に動作するために並行性を理解する必要がある小さなプロジェクトまたはプログラムの提案を探しています。
解決
本当に始めたばかりの場合は、おそらく生産者と消費者の問題が良い方法です:
http://en.wikipedia.org/wiki/Producer-consumer_problem
ウィキペディアの記事には問題の解決策も含まれているため、あまり読みすぎないでください:-)
他のヒント
行列乗算アルゴリズムを作成します。それを並列化します。それを最適化します。特にマルチコアマシンを使用している場合は、どのように拡張されるかを確認してください。それは楽しいプロジェクトです。
さまざまな戦略で数独リゾルバを試してください:
- 3つのスレッド:行に1つ、列に1つ、サブスクエアに1つ
- 9スレッド:行に3(3行ごとに1スレッド)、列に3、サブ正方形に3
- 27スレッド:行に対して9(1行ごとに1スレッド)など
mtrix乗算について@Julienに同意します。この問題では、スレッドの使用による改善がより顕著になります。
@dfaと同じように、Sudokuには同意しません。それは十分に賢明ではありません
たとえば、Matrix-Mulをスレッドで記述した結果は次のとおりです
% self
time seconds name
32.38 10.72 Simple
21.29 7.05 Tiling
15.58 5.16 SimpleThread
9.63 3.19 ThreadTiling
これは、1000 * 1000マトリックスの乗算の結果です。どのくらいのスレッド化がプログラムの速度を改善できるか、簡単にわかります。 (タイリングはキャッシュヒットを強化するために使用される技術です)
その後、構文に慣れると、古典的な問題に飛び込むことができます。それらはもう少し難しいかもしれませんが、並行性の問題を解決するパターンに慣れるのに役立ちます。
セマフォに関する小さな本をご覧になることをお勧めします。非常に包括的で、これらの問題の背後にあるアイデアを把握するのに役立ちます。
やや経験豊富なプログラマーなら、を使用して株価を処方する小さなサーバーを作成すると面白いかもしれませんプロトコルを修正。並行性を必要とする複数のクライアントに対応する必要があります(そして、SwingまたはいくつかのWeb技術を学ぶことができます)。
初心者の場合は、プロデューサースレッドといくつかのコンシューマスレッドのような単純なものをお勧めします。プロセスをグラフィカルに表示できる場合、余分なポイントが得られます。
並行性とネットワーキングの一般的な学習プロジェクトは、チャットプログラムを書くことです。 FIXサーバーの提案に似ていますが、テキストを渡すだけです。
大学で並行システムプログラミングを読むとき、ビデオ監視システムを構築しました。これは、Webカメラを備えた1つまたは複数のスレーブPCからビデオデータをフェッチする1つのマスターPCです。このプロジェクトは、効率的なネットワークプログラミング、リアルタイムの問題、JNIの両方を実際に手に入れたからです。
これは完全なプロジェクトではありませんが、いくつかのソースコードも含まれています。スレッド処理について十分に理解しておくといいと思います。
どのプロジェクトで作業している場合でも、リソースとして本 Java Concurrency In Practice を強くお勧めします。選択してください。