2016-08-16 4 views
0

私は、他の種類のサーバー(実際にはMinecraftサーバー)のインスタンスを含むクラスHostServerを持っています。このホストクラスは、 )。だから私は、(ホストクラスの)かなりの量のインスタンスの並行処理を処理する良い方法は何でしょうか?私はロック(ReentrantReadWriteLock)を使うことができると考えましたが、インスタンスがたくさんあるとかなり重いかもしれません。そこアップデータスレッドがあると他の人がちょうどデータを読み込むので、私は実際にリソースを共有する必要が多くのインスタンスの同時実行性を処理するための軽量な方法

は、あなたの答えを

EDIT(コメントへの回答を)ありがとうございます。

最新のデータを持っている必要があるので、スレッドが読み込み、他のスレッドが書き込みを行う場合は、書き込みが最初に来なければならないという事実を処理する必要があります。私はインスタンスがたくさんあるかもしれないので(ホストクラスでは10から1000、Minecraftサーバークラスでは20から10000)、コードが重すぎるのは望ましくありません。

実際のコード:https://github.com/devcreart/GameStack/blob/develop/server/src/main/java/fr/creart/gamestack/server/server/HostServer.java

おかげで再び

+3

同時性を処理する最良の方法は、そうでないことです。共有リソースを避けることができれば、それをしてください。 –

+0

これは完全にあなたが必要としている/正確にやりたいことに依存しています。さらに情報がなければ、 'ReentrantReadWriteLock'のようなロックが、あなたがやりたいことや他の解決策に適しているかどうかを言うことは不可能です。 – Jesper

+0

これまでのコードを表示 –

答えて

0

時期尚早の最適化は悪の根源です。

パフォーマンスの問題があるかどうかわからない場合は、単純な解決策を実行してください。

いくつかの要件またはいくつかの前提がある場合は、負荷テストを作成し、その後に結論を出してください。

しかし、パフォーマンスの問題が発生した場合は、今すぐ共有状態をいくつかの非ブロッキングデータ構造に移動してみてください。

+0

確かに、私はちょうど将来の問題を予防したいと思いますが、あなたは正しいです!しかし、非ブロッキングデータ構造とは何ですか? – Creart

+0

作業中に完全にブロックされていないデータ構造。最も単純な例 - ConcurrentHashMap。 –

関連する問題