
開発サーバーをセットアップしており、Mono を使用して ASP.NET ページを提供するようにセットアップしたいと考えています。Cherokee と Mono (http://www.cherokee-project.com/doc/cookbook_mono.html)、Unix ベースのスタックと Windows ベースのスタックを比較するパフォーマンス テストを行ったことがある人がいるかどうか疑問に思いました。
答え1
Mono/Linux と .NET/Windows のワークロードをテストする場合、実行環境以外にもさまざまな要素が関係していることを覚えておく必要があります。
Linux の方が Windows よりもパフォーマンスが優れている領域があります (ほとんどの IO およびネットワーク操作は、同等の C プログラムよりも高速になる傾向があります)。同時に、.NET には、より高度なガベージ コレクターと、より高度な JIT コンパイラーがあります。
クラス ライブラリに関しては、使用しているコード パスによって異なります。JacksonH が以前の投稿で述べたように、ある実装では最適化されているコード パスが、別の実装では最適化されていない場合があります。また、その逆も同様です。
ASP.NET ワークロードでは、デフォルトの設定ではすべての受信要求が単一の「ワーカー」プロセスにルーティングされることを覚えておく必要があります。mod_mono と Cherokee は同様のアプローチを使用します。
(ソース:モノプロジェクト)
少なくとも Apache では、アプリケーションのワークロードを複数のワーカーに分割できるメカニズムをサポートしています。これにより、インプロセス ロックが回避され、各ワーカーにスレッド プール全体が提供されるため、高負荷時に役立ちます。
(ソース:モノプロジェクト)
この設定を構成する方法の詳細については、以下を参照してください。
答え2
これは答えになっていません。しかし、ここには本当の答えはありません。残念ながら、これはアプリケーションに大きく依存します。あなたのアプリは、Mono がうまくできることに遭遇するかもしれませんし、実装が不十分だったりバグがあったりする何かを頻繁に使用しているかもしれません。Mono が IIS より X 倍遅い/速いということではありません。
私の提案は、アプリを 2 つの異なる EC2 インスタンス (1 つは Windows、もう 1 つは Mono) にデプロイし、そこでテストを行うことです。Mono インスタンスで重大な問題が見つかった場合は、報告していただければ、改善に努めます。
そうは言っても、個人的な経験から言うと、Mono aspx のパフォーマンスは実に優れています。