この記事では、「モニター」の意味について説明します。 Java での Monitor の導入には一定の参考価値があります。必要な方は参考にしていただければ幸いです。
モニターの概念
Monitor は英語で「モニター」と訳されることも多く、「モニター」と訳されるか「モニター」と訳されるかは、中国語の翻訳による曖昧な比較です。 、モニターの直感的な説明を実現することは不可能です。
この記事「オペレーティング システムの同期プリミティブ」では、プロセス/スレッド間の同期に直面する際にオペレーティング システムによってサポートされるいくつかの同期プリミティブを紹介します。その中で、セマフォ セマフォとミューテックス ミューテックスは最も重要な同期プリミティブです。
同時実行制御に基本的なミューテックスを使用する場合、プログラマはミューテックスのダウンおよびアップ操作の制御に細心の注意を払う必要があります。そうしないと、デッドロックやその他の問題が発生しやすくなります。正しい並行プログラムの作成を容易にするために、ミューテックスとセマフォに基づいた高レベルの同期プリミティブ モニターが提案されていますが、実際には、オペレーティング システム自体がモニター メカニズムをサポートしていないことに注意してください。モニターを使用したい場合は、まずその言語自体がモニター・プリミティブをサポートしているかどうかを調べます。例えば、C 言語はモニターをサポートしていませんが、Java 言語はモニターをサポートしています。
一般的なモニターの実装モードでは、プログラミング言語が構文内で構文糖を提供し、モニターのメカニズムを実装する方法は Java の仕事です。
モニターの重要な機能は、モニターで定義されたクリティカル セクションに同時に入ることができるプロセス/スレッドは 1 つだけであることです。これにより、モニターは相互排他を実現できます。ただし、相互排他を行うだけでは十分ではありません。モニターのクリティカル セクションに入ることができないプロセス/スレッドはブロックされ、必要に応じて起動される必要があります。明らかに、同期ツールとして、モニターはプロセス/スレッドのステータスを管理するためのそのようなメカニズムも提供する必要があります。セマフォとミューテックスがプログラミングにおいてエラーを起こしやすいと考える理由を考えてみましょう。変数を個人的に操作したり、プロセス/スレッドをブロックしたりウェイクアップしたりする必要があるからです。モニター機構が「上位プリミティブ」と呼ばれる理由は、モニターを使用する人がシンプルで使いやすいインターフェースを見るために、これらの機構を外部から遮断し、内部で実装する必要が必然的に必要になるためです。 。
監視の基本要素
監視メカニズムでは、いくつかの要素が連携する必要があります。つまり、次のとおりです。
重要なセクション
-
モニター オブジェクトとロック
モニター オブジェクトで定義された条件変数と待機およびシグナル操作。
監視メカニズムを使用する主な目的は、クリティカル セクションへの侵入を相互に排除することです。クリティカル セクションに侵入できないプロセス/スレッドをブロックするには、監視オブジェクトが必要です。このモニターは、ブロックされたスレッドを保存するためのリストなどの対応するデータ構造がオブジェクト内に存在します。同時に、モニターのメカニズムは基本的に基本的なミューテックスに基づいているため、モニター オブジェクトもミューテックスを維持する必要があります。ベースのロック。
さらに、適切な時間にプロセス/スレッドをブロックしてウェイクアップできるようにするには、この条件変数を使用して「適切な時間」がいつであるかを判断する必要があります。プログラム コードのロジックから取得することも、モニター オブジェクト内に配置することもできます。つまり、プログラマは条件変数の定義において大きな自主性を持っています。ただし、モニター オブジェクトは内部データ構造を使用してブロックされたキューを保存するため、スレッドがブロック状態に入り、後でウェイクアップできるようにする 2 つの外部 API、つまり待機と通知も提供する必要があります。
Java 言語はモニターをサポートします
モニターはオペレーティング システムによって提案された高レベルのプリミティブですが、その特定の実装モードはプログラミング言語によって異なる場合があります。以下では、Java のモニターを例として、Java でモニターがどのように実装されるかを説明します。
重要なセクションの説明
Java では、以下に示すように、synchronized キーワードを使用してインスタンス メソッド、クラス メソッド、およびコード ブロックを変更できます。
/** * @author beanlam * @version 1.0 * @date 2018/9/12 */ public class Monitor { private Object ANOTHER_LOCK = new Object(); private synchronized void fun1() { } public static synchronized void fun2() { } public void fun3() { synchronized (this) { } } public void fun4() { synchronized (ANOTHER_LOCK) { } } }
は同期キーです。 Word で変更されたメソッドとコード ブロックは、監視メカニズムの重要なセクションです。
monitor object
上記の synchronized キーワードを使用する場合、多くの場合、synchronized(this) や synchronized(ANOTHER_LOCK) (同期されている場合) など、それに関連付けるオブジェクトを指定する必要があることがわかります。変更されます。インスタンス メソッドの場合、その関連オブジェクトは実際には this です。クラス メソッドの場合、その関連オブジェクトは this.class です。つまり、synchronzied はオブジェクトに関連付ける必要があり、このオブジェクトがモニター オブジェクトです。
監視メカニズムでは、監視オブジェクトはミューテックスを維持し、スレッドのブロックとウェイクアップを管理する待機/シグナル API を定義する役割を果たします。
Java 言語の java.lang.Object クラスは、この要件を満たすオブジェクトです。任意の Java オブジェクトを監視機構の監視オブジェクトとして使用できます。
Java オブジェクトはメモリに格納され、オブジェクト ヘッダー、インスタンス データ、およびアライメント埋め込みの 3 つの部分に分かれており、そのオブジェクト ヘッダーにはロック識別子が同時に保存されます。 wait()、notify()、notifyAll() メソッドの場合、これらのメソッドの具体的な実装は、ObjectMonitor モードと呼ばれる実装に依存します。これは、C ベースの JVM 内に実装される一連のメカニズムです。基本原則は次のとおりです。
スレッドがオブジェクトのロックを取得する必要がある場合、スレッドがロックを取得すると、オブジェクトは EntrySet に配置されて待機します。現在のロックの所有者になります。プログラム ロジックに従って、ロックを取得したスレッドに何らかの外部条件が欠けており、続行できない場合 (たとえば、プロデューサーがキューがいっぱいであることを発見したり、コンシューマがキューが空であることに気づいた場合)、スレッドはロックを転送できます。 wait メソッドを呼び出してロックを解除し、ブロックして待機するように設定した待機状態に入ります。この時点で、他のスレッドがロックを取得して他の処理を実行できるため、以前に確立されていなかった外部条件が確立されます。以前にブロックされたスレッドが EntrySet に再度入ってロックを競合できること。この外部条件を監視機構では条件変数と呼びます。
synchronized キーワード
synchronized キーワードは、Java が構文レベルで使用する重要なツールであり、開発者がマルチスレッド同期を簡単に実行できるようにします。同期メソッドによって変更されたメソッドまたはコード ブロックに入るには、まず、同期キーワードにバインドされたオブジェクトのオブジェクト ロックが取得されます。このロックにより、他のスレッドがこのロックに関連する他の同期コード領域に入ることが制限されます。
インターネット上の多くの記事や情報では、同期の原理を分析する際、基本的に同期は監視機構に基づいて実装されていると書かれていますが、それを明確にしている記事は少なく、漠然とした言及ばかりです。
前述の Monitor の基本要素を参照すると、synchronized が Monitor メカニズムに基づいて実装されている場合、対応する要素は何でしょうか?
クリティカル セクションが必要です。ここでのクリティカル セクションは、オブジェクト ヘッダー ミューテックスの P または V 操作と考えることができます。
これは、モニター オブジェクトに対応します。ミューテックス?つまり、実際の監視オブジェクトが見つかりません。
したがって、「同期は監視メカニズムに基づいて実装されている」という記述は不正確かつ曖昧だと思います。
Java が提供する監視機構は実際には Object などの要素が連携して形成されており、外部条件変数もコンポーネントとなります。 JVM の基礎となる ObjectMonitor は、モニター メカニズムの実装を支援するために使用される単なる共通モードですが、ほとんどの記事では、ObjectMonitor をモニター メカニズムとして直接扱っています。
これは次のように理解されるべきだと思います。Java のモニターのサポートは、メカニズムの粒度で開発者に提供されます。つまり、開発者は synchronized キーワードを Object の wait/notify などの要素と組み合わせて使用する必要があります。同氏は、生産者と消費者の問題を解決するために監視メカニズムを使用したと述べた。
以上がモニターってどういう意味ですか? Java でのモニターの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。

Javaのパフォーマンスはハードウェアアーキテクチャと密接に関連しており、この関係を理解することでプログラミング機能を大幅に改善できます。 1)JVMは、CPUアーキテクチャの影響を受けるJITコンピレーションを介して、Java Bytecodeを機械命令に変換します。 2)メモリ管理とゴミ収集は、RAMとメモリバスの速度の影響を受けます。 3)キャッシュとブランチ予測Javaコードの実行を最適化します。 4)マルチスレッドと並列処理がマルチコアシステムのパフォーマンスを改善します。

ネイティブライブラリを使用すると、これらのライブラリはオペレーティングシステムごとに個別にコンパイルする必要があるため、Javaのプラットフォームの独立性が破壊されます。 1)ネイティブライブラリはJNIを介してJavaと対話し、Javaが直接実装できない機能を提供します。 2)ネイティブライブラリを使用すると、プロジェクトの複雑さが増し、さまざまなプラットフォームのライブラリファイルの管理が必要です。 3)ネイティブライブラリはパフォーマンスを改善できますが、それらは注意して使用し、クロスプラットフォームテストを実施する必要があります。

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









