1

コントローラーに挿入されるサービス クラス内のインスタンス evariable としてアトミック整数を使用します。スケーリングは、各スレッドが操作を実行するために必要なメモリと、1 秒あたりに処理される要求の数 (原子整数で操作を実行するための CPU 速度と時間?) によって制限されます。

@Service
public MyService{

AtomciInteger count = new AtomicIntger(0);

 public int add() {
   return count.incrementAndGet();
 }

    // accessed via ajax loop (and controller), if value changes update display
  public int getCount() {
    return count.get();
  }
}

サービス クラスはコントローラーを介してアクセスし、コントローラーは ajax 呼び出しを介してアクセスされる安らかな Web サービスとして利用できます。想定外のユーザー/リクエストをどのように処理できますか?

私が考えることができる唯一の代替手段は、休止状態のエンティティを使用し、整数値をフィールドとして保存することです。sessionfactory が dao に注入され、dao がサービス クラスに注入されるスレッド化の問題を Hibernate に処理させる – スケーリングの問題? 私の春のクラスはすべてシングルトンです。

4

1 に答える 1

2

AtomicIntger可能な限り高速です。それ (volatileフィールド) を読むことは、通常の を読むことに近いintです。更新は、単純なループで CAS 操作を使用しwhileます。これは、より高速でスレッドセーフではありません。Spring (およびおそらく AOP アスペクトのいくつかのレイヤー、Spring MVC コントローラー (十分なリフレクションを使用)) を使用しており、これを HTTP プロトコル経由で呼び出していintます。

Hibernate (それに関しては JDBC) を使用する唯一の利点は、複数のサーバーにまたがるスケーラビリティです。Atomic*ただし、Hibernate の代わりにプレーンな JDBC とデータベース シーケンスを使用します。クラスよりもはるかに高速ですが、2 桁遅くなります。適度な速度とシンプルさの両方を得るには、を検討してください。

于 2012-06-23T09:51:21.007 に答える