スレッド: [csharpll:0371] Re: アプリケーションドメインとは??
スレッド
[csharpll:0371] Re: アプリケーションドメインとは??
- Subject:
- [csharpll:0371] Re: アプリケーションドメインとは??
- From:
- 大鷲 和紀 <arc64700@...>
- Date:
- Thu, 14 Sep 2006 22:56:43 +0900
- Message-Id:
- <BAY105-F385B4293810EA5C3C20BD78A290‐at‐phx.gbl>
- In-Reply-To:
シャノンです。
#AppDomain って、普通にプログラミングする分にはほとんど使わない代物ですよね
…
#以前いた会社で作っていたプログラムの中で AppDomain をごにょごにょしていた
部分があって
#きっとあれは何だかわからないまま「こうすればエラーが出ないんだ」みたいな認
識でいたんだろうな、と。
ぶっちゃけた話、俺もよくわかってないんですが…;;
..NET では、実行モデルに抽象的な層を1つ追加したと考えればいいと思います。
従来の Win32 実行モデルでは、OS の上で複数のプロセスが動きました。
マネージアプリケーションはプラットフォーム非依存であるため、OS の上で直接動
きません。
Java アプリケーションを動かすのが JVM であるように、.NET アプリケーションを
動かすのはランタイムホストと呼ばれるネイティブアプリケーションです。
通常、VB.NET や C# で作った .exe ファイルを実行すると、プロセスが1つ生成さ
れるので、ネイティブプロセスとマネージアプリケーションが1:1に対応します。
ただし、サーバ製品のようにシビアなパフォーマンスが要求される等の理由がある場
合には、ランタイムホストを自作することができます。
クライアントからの要求1つにつきプロセスを1つ作るとリソースを食いすぎるの
で、1つのランタイムホストプロセスの中で複数のマネージアプリケーションを走ら
せることができます。この場合、ネイティブプロセスとマネージアプリケーションが
1:nに対応します。
この時、1つのランタイムホストプロセス上に複数のアプリケーションドメインが作
られて、1つのアプリケーションドメインの中で1つのマネージアプリケーションが
動きます。
マネージアプリケーションにとってのランタイムホストは、ネイティブプロセスに
とっての OS に対応すると考えれば、アプリケーションドメインがネイティブプロセ
スに相当するものに見えてくるでしょうか。
あるいは、NT サービスにも似ているかもしれません。あれは1つのサービスプロセ
ス上で複数の論理的なサービスが走りますからね。
> 3.「1プロセス内におけるアプリケーション」という単位は、モジュール(アセン
> ブリ)と類似した意味合いなのか?
No。
アセンブリは Win32 におけるモジュールに相当しますね。アプリケーションの構成
要素です。
ネイティブ実行モデルでは「1つの OS の中で複数のプロセスが走る」のが、マネー
ジ実行モデルでは「1つのプロセスの中で複数のアプリケーションが走る」に対応す
ると思われます。
> (私の中では、どちらかというとアプリケーションという単位の中に複数のプロ
> セスが存在するという認識なので変な感じ)
これは、「アプリケーション=製品」と捉えた見方でしょうか。
例えば、VisualStudio というアプリケーションは、IDE やコンパイラやデバッガと
いった複数のプロセス(プログラム)から構成されるというような。
一方、「アプリケーション=プロセス」という見方も、従来からあります。
..NET では、「アプリケーション=論理的なプロセス、論理的な実行単位」という意
味で使われるでしょう。
#AppDomain って、普通にプログラミングする分にはほとんど使わない代物ですよね
…
#以前いた会社で作っていたプログラムの中で AppDomain をごにょごにょしていた
部分があって
#きっとあれは何だかわからないまま「こうすればエラーが出ないんだ」みたいな認
識でいたんだろうな、と。
ぶっちゃけた話、俺もよくわかってないんですが…;;
..NET では、実行モデルに抽象的な層を1つ追加したと考えればいいと思います。
従来の Win32 実行モデルでは、OS の上で複数のプロセスが動きました。
マネージアプリケーションはプラットフォーム非依存であるため、OS の上で直接動
きません。
Java アプリケーションを動かすのが JVM であるように、.NET アプリケーションを
動かすのはランタイムホストと呼ばれるネイティブアプリケーションです。
通常、VB.NET や C# で作った .exe ファイルを実行すると、プロセスが1つ生成さ
れるので、ネイティブプロセスとマネージアプリケーションが1:1に対応します。
ただし、サーバ製品のようにシビアなパフォーマンスが要求される等の理由がある場
合には、ランタイムホストを自作することができます。
クライアントからの要求1つにつきプロセスを1つ作るとリソースを食いすぎるの
で、1つのランタイムホストプロセスの中で複数のマネージアプリケーションを走ら
せることができます。この場合、ネイティブプロセスとマネージアプリケーションが
1:nに対応します。
この時、1つのランタイムホストプロセス上に複数のアプリケーションドメインが作
られて、1つのアプリケーションドメインの中で1つのマネージアプリケーションが
動きます。
マネージアプリケーションにとってのランタイムホストは、ネイティブプロセスに
とっての OS に対応すると考えれば、アプリケーションドメインがネイティブプロセ
スに相当するものに見えてくるでしょうか。
あるいは、NT サービスにも似ているかもしれません。あれは1つのサービスプロセ
ス上で複数の論理的なサービスが走りますからね。
> 3.「1プロセス内におけるアプリケーション」という単位は、モジュール(アセン
> ブリ)と類似した意味合いなのか?
No。
アセンブリは Win32 におけるモジュールに相当しますね。アプリケーションの構成
要素です。
ネイティブ実行モデルでは「1つの OS の中で複数のプロセスが走る」のが、マネー
ジ実行モデルでは「1つのプロセスの中で複数のアプリケーションが走る」に対応す
ると思われます。
> (私の中では、どちらかというとアプリケーションという単位の中に複数のプロ
> セスが存在するという認識なので変な感じ)
これは、「アプリケーション=製品」と捉えた見方でしょうか。
例えば、VisualStudio というアプリケーションは、IDE やコンパイラやデバッガと
いった複数のプロセス(プログラム)から構成されるというような。
一方、「アプリケーション=プロセス」という見方も、従来からあります。
..NET では、「アプリケーション=論理的なプロセス、論理的な実行単位」という意
味で使われるでしょう。
[csharpll:0373] Re: アプリケーションドメインとは??
> シャノンです。
シャノンさんお世話になります。
> #AppDomain って、普通にプログラミングする分にはほとんど使わない代物で
すよね
あら、そうなんですか?^^;
..NETアプリをゴリゴリ書いてるわけではないのでよく知らないのですが、てっき
りスレッドと用途によって使いわけるみたいな感じかと思ってました。
それなら多様されることはあるのかなと。
> これは、「アプリケーション=製品」と捉えた見方でしょうか。
> 例えば、VisualStudio というアプリケーションは、IDE やコンパイラやデ
バッガと
> いった複数のプロセス(プログラム)から構成されるというような。
その通りです。
> 一方、「アプリケーション=プロセス」という見方も、従来からあります。
> .NET では、「アプリケーション=論理的なプロセス、論理的な実行単位」と
いう意
> 味で使われるでしょう。
なるほど。
勉強になります。ありがとうございます。
シャノンさんお世話になります。
> #AppDomain って、普通にプログラミングする分にはほとんど使わない代物で
すよね
あら、そうなんですか?^^;
..NETアプリをゴリゴリ書いてるわけではないのでよく知らないのですが、てっき
りスレッドと用途によって使いわけるみたいな感じかと思ってました。
それなら多様されることはあるのかなと。
> これは、「アプリケーション=製品」と捉えた見方でしょうか。
> 例えば、VisualStudio というアプリケーションは、IDE やコンパイラやデ
バッガと
> いった複数のプロセス(プログラム)から構成されるというような。
その通りです。
> 一方、「アプリケーション=プロセス」という見方も、従来からあります。
> .NET では、「アプリケーション=論理的なプロセス、論理的な実行単位」と
いう意
> 味で使われるでしょう。
なるほど。
勉強になります。ありがとうございます。
[csharpll:0374] Re: アプリケーションドメインとは??
小野@どっとねっとふぁん です。
----- Original Message -----
From: "DD." <daichan5692@...>
Subject: [csharpll:0373] Re: アプリケーションドメインとは??
>> #AppDomain って、普通にプログラミングする分にはほとんど使わない代物で
> すよね
> あら、そうなんですか?^^;
> .NETアプリをゴリゴリ書いてるわけではないのでよく知らないのですが、てっき
> りスレッドと用途によって使いわけるみたいな感じかと思ってました。
AppDomainはセキュリティ境界にもなってますし、メモリ空間もそれぞれで
独立していたと思います。
で、AppDomain間でのデータのやりとりにはリモーティングが必要になったかと。
それを考えるとあまり普通は使わないんじゃないですかね。
一度ロードしたアセンブリをメモリからアンロードするためにはAppDomainレベルでの
破棄が必要なはずなので、そのような要件があるようなとき以外には
必要ないんじゃないかなぁ。
------------------------------------------------
あおい情報システム株式会社(http://www.ibaraki.tv/aoi/)
小野修司(どっとねっとふぁん)
http://dotnetfan.org/
------------------------------------------------
----- Original Message -----
From: "DD." <daichan5692@...>
Subject: [csharpll:0373] Re: アプリケーションドメインとは??
>> #AppDomain って、普通にプログラミングする分にはほとんど使わない代物で
> すよね
> あら、そうなんですか?^^;
> .NETアプリをゴリゴリ書いてるわけではないのでよく知らないのですが、てっき
> りスレッドと用途によって使いわけるみたいな感じかと思ってました。
AppDomainはセキュリティ境界にもなってますし、メモリ空間もそれぞれで
独立していたと思います。
で、AppDomain間でのデータのやりとりにはリモーティングが必要になったかと。
それを考えるとあまり普通は使わないんじゃないですかね。
一度ロードしたアセンブリをメモリからアンロードするためにはAppDomainレベルでの
破棄が必要なはずなので、そのような要件があるようなとき以外には
必要ないんじゃないかなぁ。
------------------------------------------------
あおい情報システム株式会社(http://www.ibaraki.tv/aoi/)
小野修司(どっとねっとふぁん)
http://dotnetfan.org/
------------------------------------------------
[csharpll:0375] Re: アプリケーションドメインとは??
> 一度ロードしたアセンブリをメモリからアンロードするためにはAppDomainレ
ベルでの
>
> 破棄が必要なはずなので、そのような要件があるようなとき以外には
> 必要ないんじゃないかなぁ。
てことは、.NETはアセンブリをアプリケーションドメインとして読み込んでるっ
てことなのかなぁ。
でもそれじゃ動作が遅すぎか・・・
ベルでの
>
> 破棄が必要なはずなので、そのような要件があるようなとき以外には
> 必要ないんじゃないかなぁ。
てことは、.NETはアセンブリをアプリケーションドメインとして読み込んでるっ
てことなのかなぁ。
でもそれじゃ動作が遅すぎか・・・