クエリの非同期サーバーのパフォーマンスの最適化は、同期を有効に

:私は、パフォーマンスの最適化が仕事で発生するようBUGを共有会った前に私が記事を書いた非同期クエリターンシンクロトロンBUGシェアRedisのサービスの実装を

最近、同様のタスクが発生し、一部のマルチクエリインターフェイスは非常に使用されるプログラムのパフォーマンス最適化サーバ・インタフェースを共有し、同期する。このターン、非同期クエリの最適化に適しているがあります。

個人的に私は次のような特徴について持っている(データの書き込みに別々の句を含む)このプログラムは、適切なクエリインターフェイスであることを考えます:

  • 複数のクエリ
  • クエリに長い時間
  • 戻り結果は、お互いに依存しません

擬似コードは以下のように:

    @Override
    public void doExecute(Map<String, Object> dataMap) {
        doSomething(dataMap);
        CountDownLatch countDownLatch = new CountDownLatch(3);
        teacherPadAsyncService.do1(dataMap, countDownLatch, params);
        teacherPadAsyncService.do2(dataMap, countDownLatch, params);
        teacherPadAsyncService.do3(dataMap, countDownLatch, params);
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            logger.error("异步处理线程异常", e);
        }
    }复制代码

実装は春で、非常にシンプルである@Async必要性は、いくつかの設定を変更するには、注釈、スレッドの安全性に、注意を払うし、それらを繰り返しません。

    @Async
    public void do1(Map<String, Object> dataMap, CountDownLatch countDownLatch, Params params) {
        try {
            dosomething(dataMap, params);
        } catch (Exception e) {
            dosomething();
        } finally {
            countDownLatch.countDown();
        }
    }复制代码

これは、他の最適化と共有する機会を持って、日常的な最適化プログラムと考えられます。

  • 厳粛に宣言:最初の公開番号「FunTester」に登場した記事、(テンセントクラウドを除く)第三者再生を禁止し、公開します。

技術関連記事

非技術的な選択された記事

おすすめ

転載: juejin.im/post/5e425dcb51882549380c80a3