スレッド: [csharpll:0370] Re: アプリケーションドメインとは??
スレッド
[csharpll:0370] Re: アプリケーションドメインとは??
- Subject:
- [csharpll:0370] Re: アプリケーションドメインとは??
- From:
- Kouji Matsui <k@...>
- Date:
- Thu, 14 Sep 2006 22:25:09 +0900
- X-Mailer:
- Microsoft Office Outlook 11
- Message-Id:
- <006501c6d801$3366a650$8be9a8c0‐at‐ad.kekyo.net>
- In-Reply-To:
こんにちは、kekyoです。
AppDomainの分離を積極的に使ってコードを書いたことはないので
詳しく知っているわけではありません。
> 4.「プロセス内に複数のドメイン」に関して、従来ネットワークにおいて使われ
> るドメインと、CLRでいうところのドメインに違いがあるような気がします。
インターネットドメインとはまったく別物で無関係です。
#ドメイン=領域 から来ていると思います。
マルチスレッド環境でのマネージコードとアンマネージコードを比較すると、
アンマネージコードではポインタを容易に操作できることから、
本来関係のない別のスレッドに属するインスタンスを破壊する可能性が
あります。
それを嫌ってスレッドではなく、プロセス分離を使うコードがあります。
しかし、マネージコードはコードが検証されるので、比較的安全です。
(無理やり破壊する場合の話を除く)
マルチスレッドでお互いに属するインスタンスを破壊する可能性は、
マネージコードからアンマネージコードを呼び出さない限りは無いという
前提に立てます。
そのため、従来では安全性のためにプロセス分離を行っていたコードを、
積極的にマルチスレッド・単一プロセスモデルに出来ます。
#それにより、プロセス間通信のオーバーヘッドも削減できる。
ただ、プロセス分離を行うのは安全性の問題だけではなく、シングルトン
インスタンスやプロセス単位のステートに依存したくないなどの問題が
あるからです。
そこで、単一プロセスでありながら、論理的にプロセス内を区切ってしまう
ことでこれらの問題を回避するのが AppDomain の役割だと思います。
AppDomain境界をまたぐ場合は、プロセス境界をまたぐ場合と同様に
マーシャリングコストが発生するはず(単一AppDomainよりは効率が悪い)
ですが、裏方の最適化によってコストを抑えることが可能なのではないかと
見ています。
また、プロセスを分離した場合はプロセス生成のコスト(OSのカーネルが
処理する)があるため、頻繁に生成と破棄を行うと重くなりますが、
AppDomainの生成と破棄はもっと軽いのではないかと思います。
#AppDomainの破棄には厳しい条件があったような気がしますが。
#このあたり、検証してみたいと思いつつ時間が取れない...
----------------------
Kouji Suzuki / Microsoft Certified Professional
mailto:k@...
# 実行形式の添付ファイルかHTMLメールは自動的に廃棄されます。
# It will be automatically discarded if the attached file of
# executable files or "HTML mail" is transmitted to this mail address.
AppDomainの分離を積極的に使ってコードを書いたことはないので
詳しく知っているわけではありません。
> 4.「プロセス内に複数のドメイン」に関して、従来ネットワークにおいて使われ
> るドメインと、CLRでいうところのドメインに違いがあるような気がします。
インターネットドメインとはまったく別物で無関係です。
#ドメイン=領域 から来ていると思います。
マルチスレッド環境でのマネージコードとアンマネージコードを比較すると、
アンマネージコードではポインタを容易に操作できることから、
本来関係のない別のスレッドに属するインスタンスを破壊する可能性が
あります。
それを嫌ってスレッドではなく、プロセス分離を使うコードがあります。
しかし、マネージコードはコードが検証されるので、比較的安全です。
(無理やり破壊する場合の話を除く)
マルチスレッドでお互いに属するインスタンスを破壊する可能性は、
マネージコードからアンマネージコードを呼び出さない限りは無いという
前提に立てます。
そのため、従来では安全性のためにプロセス分離を行っていたコードを、
積極的にマルチスレッド・単一プロセスモデルに出来ます。
#それにより、プロセス間通信のオーバーヘッドも削減できる。
ただ、プロセス分離を行うのは安全性の問題だけではなく、シングルトン
インスタンスやプロセス単位のステートに依存したくないなどの問題が
あるからです。
そこで、単一プロセスでありながら、論理的にプロセス内を区切ってしまう
ことでこれらの問題を回避するのが AppDomain の役割だと思います。
AppDomain境界をまたぐ場合は、プロセス境界をまたぐ場合と同様に
マーシャリングコストが発生するはず(単一AppDomainよりは効率が悪い)
ですが、裏方の最適化によってコストを抑えることが可能なのではないかと
見ています。
また、プロセスを分離した場合はプロセス生成のコスト(OSのカーネルが
処理する)があるため、頻繁に生成と破棄を行うと重くなりますが、
AppDomainの生成と破棄はもっと軽いのではないかと思います。
#AppDomainの破棄には厳しい条件があったような気がしますが。
#このあたり、検証してみたいと思いつつ時間が取れない...
----------------------
Kouji Suzuki / Microsoft Certified Professional
mailto:k@...
# 実行形式の添付ファイルかHTMLメールは自動的に廃棄されます。
# It will be automatically discarded if the attached file of
# executable files or "HTML mail" is transmitted to this mail address.
[csharpll:0372] Re: アプリケーションドメインとは??
> #ドメイン=領域 から来ていると思います。
なるほど。
> また、プロセスを分離した場合はプロセス生成のコスト(OSのカーネルが
> 処理する)があるため、頻繁に生成と破棄を行うと重くなりますが、
> AppDomainの生成と破棄はもっと軽いのではないかと思います。
てことは、従来の CreateProcess()(プロセス生成)とかよりも
AppDomain.ExecuteAssembly()(アプリケーションドメインを用いたプロセス生
成) のほうがコスト的にも低いってことですね。
非常に勉強になります。ありがとうございます。
う〜ん、やっぱり「Essential .NET」に目を通してみたいけどお金がorz
なるほど。
> また、プロセスを分離した場合はプロセス生成のコスト(OSのカーネルが
> 処理する)があるため、頻繁に生成と破棄を行うと重くなりますが、
> AppDomainの生成と破棄はもっと軽いのではないかと思います。
てことは、従来の CreateProcess()(プロセス生成)とかよりも
AppDomain.ExecuteAssembly()(アプリケーションドメインを用いたプロセス生
成) のほうがコスト的にも低いってことですね。
非常に勉強になります。ありがとうございます。
う〜ん、やっぱり「Essential .NET」に目を通してみたいけどお金がorz