ホームページ  >  記事  >  Java  >  Netty で Java ロックの使用法を学ぶ

Netty で Java ロックの使用法を学ぶ

coldplay.xixi
coldplay.xixi転載
2021-01-04 10:04:242207ブラウズ

Java 基本チュートリアルNetty を使って Java ロックを学ぶ方法を紹介するコラム

Netty で Java ロックの使用法を学ぶ

##推奨 (無料): java 基本チュートリアル

1 オブジェクトとスコープをロックする

    粒度を減らす


2 ロック オブジェクト自体のサイズ

    占有領域を減らす

  • アトミック long 対 S long
    前者は、ハッシュコード、ロック、その他の情報を保存するためのオブジェクト ヘッダーを含むオブジェクトであり、64 ビット システムでは 16 バイトを占有します。ビット システム:
  • volatile long= 8 バイト
  • AtomicLong = 8 バイト (揮発性長) 16 バイト (オブジェクト ヘッダー) 8 バイト (参照) = 32 バイト
  • 少なくとも 24 バイトを節約してください。
So Atomic* オブジェクト =>> 揮発性のプライマリ タイプ Static Atomic*FieldUpdater

3 ロック速度

同時実行性の向上

LongCounter

メモリ割り当てのバイト数を記録するなどの機能に使用されます。

高い同時実行性の場合: java.util.concurrent.atomic.AtomicLong => java.util.concurrent.atomic.LongAdder

結論: 最新の JDK 機能を測定して使用するタイムリーな方法

さまざまな状況に応じて、さまざまな同時実行パッケージ実装を選択します

JDK< 1.8 ConcurrentHashMapV8 (jDK8 の ConcurrentHashMap のバージョン) を検討してください


4 さまざまなシナリオに応じてさまざまな同時実行クラスを選択します

ニーズに応じて変更します

  • シャットダウン イベント エグゼキュータを閉じて待ちます ( Event Executor) :

    Object.wait/notify =》 CountDownLatch

  • Nio Event ループにタスクを保存するキュー

    Jdk の LinkedBlockingQueue (MPMC) 、マルチプロデューサー 複数コンシューマー) -> jctools の MPSC
    io.netty.util.internal.PlatformDependent.Mpsc#newMpscQueue(int):


    #5 lock の値

    使用できない場合は使用しないでください

    Netty アプリケーションのシナリオ: 部分シリアルおよび全体並列>--1 つのキューと複数のスレッド モード:

    ユーザー開発の難しさを軽減し、ロジックを簡素化し、処理パフォーマンスを向上させます
    ロックによるコンテキストの切り替えと同時実行保護の追加のオーバーヘッドを回避します

    回避しますロックの使用: Netty の軽量レベルのスレッド プール実装などのリソース競合を回避するには、ThreadLocal を使用します。


    以上がNetty で Java ロックの使用法を学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。