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

coldplay.xixi
リリース: 2021-01-04 10:04:24
転載
2076 人が閲覧しました

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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!