3

私は 2 プレーヤーのビデオゲームを作成しています。対戦相手の位置はスレッドで更新されます。これは、継続的にリッスンしているソケットがあるためです。共有したいのは、位置と回転です。

これはビデオゲームであるため、メイン スレッドをブロックしたり (または可能な限り最小限の時間にしたり)、パフォーマンスに影響を与えたりしたくありません。したがって、この情報を共有するために私が見たことから、通常行うことは次のようになります

class sharedinfo
{
   public synchronized read();
   public synchronized write();
}

しかし、これは3つの値(または将来さらに多くの情報が書き込まれる)が書き込まれるまで、メインスレッド(ビデオゲームを描画するのと同じ)での読み取りをブロックします。このゲームは Android 用でもあるため、パフォーマンスが非常に重要であると言うことが重要です)。

しかし、参照自体が更新されているときにのみ停止するため、AtomicReference 内に sharedInfo を配置し、synchronized を削除すると、より効率的になると考えていました (書き込みが存在しないため、新しいオブジェクトを作成して、また、atomic* はハードウェア操作を使用し、同期よりも効率的であるとも述べています。

どう思いますか?

4

1 に答える 1

1

このためにキューを使用することを検討してください。Javaにはいくつかの優れた並行キューの実装があります。java.util.concurrentでBlockingQueueインターフェースを検索し、誰がそれを実装するかを調べます。あなたが考えもしなかった実装された戦略を見つけるためにあなたが満たす可能性があります。

それを知る前に、スレッド間の位置だけでなく、キューを使用して、さまざまなタイプのオブジェクトを、場合によってはさまざまな優先順位で貼り付けることができます。

コードで可能な限りインターフェース(QueueやBlockingQueueなど)を使用する場合(つまり、特定のインスタンスが構築される場所以外の場所)、必要に応じて、使用しているキューの正確なタイプを簡単に交換できます。さまざまな機能、または単に遊んでみたい。

于 2012-11-17T06:18:08.483 に答える