国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
#C A S 基本概念" >#C A S 基本概念
キャッシュ ロック " > キャッシュ ロック
ホームページ Java &#&面接の質(zhì)問 初心者も BAT 面接官と競爭できる: CAS

初心者も BAT 面接官と競爭できる: CAS

Aug 24, 2023 pm 03:09 PM
Javaの面接の質(zhì)問

まえがき

Java 並行プログラミング シリーズ番外編 C A S (比較と交換)、この記事スタイルは依然として寫真と情報でいっぱいです。テキストは理解しやすく、読者は面接官とクレイジーな対決をすることができます。

C A S は並行プログラミングに欠かせない基礎(chǔ)知識です。C A S は面接でもよくテストされる場所なので、C A S は必須です。この記事は間違いなく、読者に C A S についての深い理解を提供します。

概要

初心者も BAT 面接官と競爭できる: CAS

#C A S 基本概念

C A S(compareAndSwap)比較交換と呼ばれる、ロックフリーのアトミック アルゴリズムです。cmpxchg ハードウェア アセンブリ命令 (保証されたアトミック性 ) としてオペレーティング システムにマップされます。その機能は、## を作成することです。 #C P Uメモリ値を新しい値に更新しますが、條件があります。メモリ値は期待値と同じである必要があり、C A S 操作ではユーザー モードとユーザー モードを切り替える必要はありません。カーネル モード: ユーザー モードで直接メモリの読み取りと書き込みを行います ( はブロッキング/スレッド コンテキストの切り替えがないことを意味します)。

これには 3 パラメータが含まれています。 C A S (V, E, N) 、V は更新するメモリ値を表し、E は更新するメモリ値を表します。期待値、N は新しい値を表します。V 値が E 値と等しい場合、V 値は次のように更新されます。 N 値、V 値が E 値と異なる場合、更新は実行されません。これは C A S 操作です。

初心者も BAT 面接官と競爭できる: CAS

簡単に言うと、C A S では、追加の期待値、つまり、変數(shù)が次の場合にこの変數(shù)が現(xiàn)在どのように見えるかを指定する必要があります。ご想像のとおり、これは他の人によって変更されたことを意味します。必要なのは、それを再読み込みして、新しい期待値を設定し、再度変更してみることだけです。

C A S がアトミック性を保証する方法

アトミック性とは、C P U の実行中に 1 つ以上の操作が中斷されないという特性を指します。途中で実行することはできません (中斷できない 1 つまたは一連の操作 )。

C A S のアトミック性を確保するために、C P U は次の 2 つのメソッドを提供します

  • バス ロック
  • キャッシュ ロック

バス ロック

バス (B U S) は、コンピューター コンポーネント間でデータを送信する方法であり、C P U を意味します。 他のコンポーネントとの接続とデータの送信は、C P U メモリの読み書きなどのバスによって行われます。

初心者も BAT 面接官と競爭できる: CAS

バス ロックは、C P U がバス ロックを使用することを意味します。いわゆるバス ロックは、C P U によって提供される ## です。 #LOCK# 信號、C P U がバス上に LOCK# 信號を出力すると、他の C P U のバス リクエストはブロックされます。

初心者も BAT 面接官と競爭できる: CAS

キャッシュ ロック

バス ロック方式はアトミック性を保証しますが、ロック期間中に大量のブロッキングが発生し、システムのパフォーマンスのオーバーヘッドが増加します。そのため、パフォーマンスを向上させるために、最新の

C P U は次のように設計されています。ロック範囲を狹めるという考え方 キャッシュラインロック ( キャッシュラインは C P U キャッシュストレージ の最小単位です)。

いわゆる キャッシュ ロックは、キャッシュ ラインをロックする C P U を指します。キャッシュ ライン內(nèi)の共有変數(shù)がメモリに書き戻されるとき、 other C P U は、バス スニッフィング メカニズムを通じてシェア変數(shù)が変更されたかどうかを検出します。変更された場合は、対応するシェア変數(shù)のキャッシュ ラインを無効にし、メモリから最新のデータを再度読み取ります。キャッシュ ロックは以下に基づいています。キャッシュ整合性メカニズム。キャッシュ整合性メカニズムにより、3 つ以上の C P U が同じ共有変數(shù)を同時に変更することが防止されるため、実裝されています (Modern C P U は基本的にサポートし、使用します)キャッシュ ロック メカニズム) 。

C A S

C A S とロックの両方の問題は、アトミック性の問題を解決します。ロックと比較すると、ブロック、スレッド コンテキストの切り替え、またはロックがありません。ロックであるため、C A S はロックよりもパフォーマンスが優(yōu)れていますが、C A S にも欠點があります。

C A S の質(zhì)問は次のとおりです

  • 共有変數(shù)のアトミック操作のみを保証できます
  • スピン時間が長すぎます (スピン ロックに基づく)
  • ABA質(zhì)問

アトミックに操作されることが保証できる共有変數(shù)は 1 つだけです

C A S 1つの変數(shù)のみを?qū)澫螭趣工毪长趣扦蓼?シェア変數(shù)を使用します シェア変數(shù)が複數(shù)ある場合はロックしか使用できません もちろん複數(shù)の変數(shù)を1つの変數(shù)に統(tǒng)合する方法がある場合は C A S## を使用するのも良いです# (読み取り/書き込みロックの state など) の上位ビットと下位ビット。

スピン時間が長すぎます

スレッドがロックを取得したとき失敗してもブロックや中斷は行われませんが、成功するまで一定時間後に再度取得を試みます。この周期的な取得メカニズムはスピン ロック (spinlock) と呼ばれます。

スピン ロックの利點は、ロックを保持しているスレッドが短時間でロックを解放し、ロックの競合を待機しているスレッドがブロッキング狀態(tài)になる必要がないことです (スレッドは必要ありません)コンテキスト切り替え/ユーザー モードとカーネル狀態(tài)の切り替えは必要ありません)、待機するだけで済み (spin)、ロックを保持しているスレッドがロックを解放した後に取得できるため、消費が回避されます。ユーザーモードとカーネルモードの切り替え。

スピン ロックの欠點は明らかです。スレッドは長時間ロックを保持し、競合するロックを待機しているスレッドはスピンし続けます。つまり、CPU はアイドル狀態(tài)になり、リソースが意味のない場所で無駄に消費されるため、スピンは一般に、周波數(shù)は制限されています。

最後に、スピン ロックの実裝について話しましょう。スピン ロックの実裝は、C A S に基づいて行うことができます。まず、lockValue オブジェクトのデフォルト値 を定義します。 1、1 はロック リソースが空いていることを意味し、0 はロック リソースが占有されていることを意味します。コードは次のとおりです。

public?class?SpinLock?{
????
????//lockValue?默認值1
????private?AtomicInteger?lockValue?=?new?AtomicInteger(1);
????
????//自旋獲取鎖
????public?void?lock(){

????????//?循環(huán)檢測嘗試獲取鎖
????????while?(!tryLock()){
????????????//?空轉(zhuǎn)
????????}

????}
????
????//獲取鎖
????public?boolean?tryLock(){
????????//?期望值1,更新值0,更新成功返回true,更新失敗返回false
????????return?lockValue.compareAndSet(1,0);
????}
????
????//釋放鎖
????public?void?unLock(){
????????if(!lockValue.compareAndSet(1,0)){
????????????throw?new?RuntimeException("釋放鎖失敗");
????????}
????}

}

タイプ AtomicIntegerlockValue 変數(shù)は上記で定義されています。AtomicInteger は、C A S# に基づいて Java によって実裝されます。 ##IntegerAtomic 操作クラスでは 3 つの関數(shù)も定義されていますlock、tryLock、unLock

tryLock function-get lock

  • #期待値 1、更新値 0
  • ##C A SUpdate
  • 期待値が
    lockValue 値と等しい場合、lockValue 値は 0 および # に更新されます。 ##true# が返される ##、それ以外の場合は次のロジックを?qū)g行します。
    期待値が
  • lockValue
  • 値と等しくない場合は、更新は行われず、
    false# が返されます ##unLock 関數(shù)リリース ロック
    • 期待値0、更新値1
    • # C A SUpdate
    • 期待値が lockValue 値と等しい場合、lockValue 値は次のようになります。 1 に更新された場合は、true を返します。それ以外の場合は、次のロジックを?qū)g行します。
    • 期待値が次と等しくない場合lockValue value 、更新は行わず、false
    lock 関數(shù) - スピンしてロックを取得します

    • #tryLock 関數(shù)を?qū)g行し、停止する場合は true を返します。そうでない場合はループし続けます。
    初心者も BAT 面接官と競爭できる: CAS
    上の図からわかるように、

    tryLock が成功したスレッド (更新 lockValue0# に更新) # #)、コード ブロックが実行されます。他のスレッド tryLock がスピンし、lockValue1tryLock に更新されるまで待機します。 成功したスレッド unLock を?qū)g行します (Update lockValue1 に)、回転するスレッドは tryLock を?qū)g行します。成功しました。 <h2 data-tool="mdnice編輯器" style="font-size: 22px;text-align: center;font-weight: bold;line-height: 1.1em;padding-top: 12px;padding-bottom: 12px;margin: 70px 30px 30px;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);"> <span style="float: left;display: block;width: 90%;border-top: 1px solid #000;height: 1px;line-height: 1px;margin-left: -5px;margin-top: -17px;"> </span><span style="display: block;width: 3px;margin-left: 5%;height: 3px;line-height: 3px;overflow: hidden;background-color: rgb(0, 0, 0);box-shadow: rgb(0, 0, 0) 3px 0px, rgb(0, 0, 0) 0px 3px, rgb(0, 0, 0) -3px 0px, rgb(0, 0, 0) 0px -3px;"></span><span style="display: block;-webkit-box-reflect: below 0em -webkit-gradient(linear,left top,left bottom, from(rgba(0,0,0,0)),to(rgba(255,255,255,0.1)));">ABA の質(zhì)問</span><span style="display: block;width: 3px;margin-left: 95%;height: 3px;line-height: 3px;overflow: hidden;background-color: rgb(0, 0, 0);box-shadow: rgb(0, 0, 0) 3px 0px, rgb(0, 0, 0) 0px 3px, rgb(0, 0, 0) -3px 0px, rgb(0, 0, 0) 0px -3px;"></span><span style="float: right;display: block;width: 90%;border-bottom: 1px solid #000;height: 1px;line-height: 1px;margin-right: -5px;margin-top: 16px;"> </span> </h2> <p data-tool="mdnice編輯器" style="padding-top: 8px;padding-bottom: 8px;margin: 10px;line-height: 1.75;letter-spacing: 0.2em;font-size: 15px;word-spacing: 0.1em;"><code style='font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);'>C A S要確認更新対象のメモリ値が変更されているかどうか、変更されていない場合は更新されますが、元々値が A だったものが B になり、その後、 # 再度 ##A を確認すると、C A S が変更されていないことがわかります。

    2 つのスレッドがあると仮定します。スレッド 1 がメモリ値 #??##A を読み取り、スレッド 1 がタイム スライスを使い果たし、スレッド 2# に切り替えます。 ##、スレッド 2 もメモリ値 #??##A を読み取り、それを B 値に変更し、B 値を # に復元しました。 #A 値、簡単に言えば、変更シーケンスは A->B->A であり、スレッド 1 が実行を再開し、メモリ値がまだ殘っていることがわかります。 A を?qū)g行し、C A S 操作を?qū)g行します。これは有名な ABA の問題ですが、問題はないようです。 <p data-tool="mdnice編輯器" style="padding-top: 8px;padding-bottom: 8px;margin: 10px;line-height: 1.75;letter-spacing: 0.2em;font-size: 15px;word-spacing: 0.1em;"> これは単純なデータ構(gòu)造なので特に問題はありませんが、複雑なデータ構(gòu)造の場合は問題が発生する可能性があります (<strong>Using <code style='font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);'>AtomicReference can use C A S オブジェクト ) で、リンク リスト データ構(gòu)造を例として、リンク リストに A->B# があると仮定して、2 つのスレッドが C A S を通じてヘッド ノードを削除します。 ## ノード

    初心者も BAT 面接官と競爭できる: CAS

    • Thread1A ノードを削除すると、B ノードがヘッド ノードになり、これから実行されます。 ##C A S(A,A,B) の場合、タイム スライスが使い果たされ、thread2
    • thread## に切り替えられます。 #2
      A および B ノード
    • スレッド
    • 2
      を削除し、C および A ノードとリンクされたlist ノードは A- >C
    • Thread
    • 1
      タイムスライスを再取得して実行C A S(A,A,B)
    • 紛失
    • C
      ノード

    A B A 問題を解決するのも非常に簡単です。バージョン番號を追加し、変更されるたびに 1 (つまり A) を追加するだけです。 —> B — > A1A —> 2B —> 3A になり、AtomicStampedRdference は、このソリューションを?qū)g裝するために Java で提供されます ( 面接で C A S を?qū)い亭胂蓼?、必?ABA を?qū)い亭毪长趣摔胜辘蓼?。これを理解する必要がありま?)。

以上が初心者も BAT 面接官と競爭できる: CASの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

インタビュアー: Spring Aop の共通アノテーションと実行シーケンス インタビュアー: Spring Aop の共通アノテーションと実行シーケンス Aug 15, 2023 pm 04:32 PM

Spring について知っている必要があるので、Aop のすべての通知の順序について話しましょう。Spring Boot または Spring Boot 2 は AOP の実行順序にどのように影響しますか? AOP で遭遇した落とし穴について教えてください。

特定のグループへのインタビュー: オンラインで OOM に遭遇した場合、どのようにトラブルシューティングを行うべきですか?の解き方?どのようなオプションがありますか? 特定のグループへのインタビュー: オンラインで OOM に遭遇した場合、どのようにトラブルシューティングを行うべきですか?の解き方?どのようなオプションがありますか? Aug 23, 2023 pm 02:34 PM

OOM は、プログラムに脆弱性があることを意味します。これは、コードまたは JVM パラメータ設定が原因である可能性があります。この記事では、Java プロセスが OOM をトリガーした場合のトラブルシューティング方法について読者に説明します。

Ele.me の筆記試験問題は簡単そうに見えますが、多くの人が困惑します。 Ele.me の筆記試験問題は簡単そうに見えますが、多くの人が困惑します。 Aug 24, 2023 pm 03:29 PM

多くの企業(yè)の筆記試験の問題には落とし穴があり、うっかり陥る可能性がありますので、甘く見ないでください。サイクルに関するこの種の筆記試験問題に遭遇した場合は、冷靜に考えて段階的に解答することをお勧めします。

先週、XX保険の面接を受けましたが、とても良かったです。 ! ! 先週、XX保険の面接を受けましたが、とても良かったです。 ! ! Aug 25, 2023 pm 03:44 PM

「先週、グループの友人が平安保険の面接に行きました。結(jié)果は少し殘念でした。非常に殘念ですが、落ち込まないでほしいと思います。あなたが言ったように、基本的には、ここで出た質(zhì)問はすべて解決しました」面接は面接の質(zhì)問を暗記すれば解けますので、頑張ってください!

面接での 5 つの質(zhì)問。すべてに正解できる人は 10% 未満です。 (答え付き) 面接での 5 つの質(zhì)問。すべてに正解できる人は 10% 未満です。 (答え付き) Aug 23, 2023 pm 02:49 PM

この記事では、Java String クラスに関する 5 つの面接の質(zhì)問を取り上げます。私は面接プロセス中にこれら 5 つの質(zhì)問のうちのいくつかを個人的に経験しました。この記事は、これらの質(zhì)問に対する答えがなぜこのようになるのかを理解するのに役立ちます。

初心者も BAT 面接官と競爭できる: CAS 初心者も BAT 面接官と競爭できる: CAS Aug 24, 2023 pm 03:09 PM

Java並行プログラミングシリーズの番外編「C A S (Compare and swap)」は、絵と文章でわかりやすく、インタビュアーと夢中で會話できるスタイルを保っています。

ほぼすべての Java インタビューで聞かれる質(zhì)問: ArrayList と LinkedList の違いについての話 ほぼすべての Java インタビューで聞かれる質(zhì)問: ArrayList と LinkedList の違いについての話 Jul 26, 2023 pm 03:11 PM

Java のデータ構(gòu)造がインタビューの焦點です。Java のインタビューに參加したことのある人なら誰でも、ある程度の経験があるはずです。面接官がこのような質(zhì)問をするとき、単に「使い方を知っている」というレベルにとどまるのではなく、Java で一般的に使用されるデータ型の基礎(chǔ)となる構(gòu)造を?qū)W習したかどうかを確認したいことがよくあります。

インタビュアー: クラスロードプロセスについて教えてください (10 個の図) インタビュアー: クラスロードプロセスについて教えてください (10 個の図) Aug 23, 2023 pm 03:05 PM

クラスを使用する場合は、ClassLoader を通じてクラスをメモリにロードする必要があります。

See all articles