0

現在、ホームページを持つアプリケーションを作成しようとしています。このホームページには、CPU を集中的に使用するコードを実行して結果を表示するボタンがあります。タイトルで述べたように、アプリケーションは Windows フォームではなく ASP.NET と C# を使用しています。

私は C# に比較的慣れておらず、他のプログラミング言語でこれを試みたことはありません。また、これを進める方法が本当にわからないので、表示するコードもありません。

4

2 に答える 2

0

はい、サーバー上でCPUを集中的に使用するコードを実行できます。通常、これにより Web アプリケーションが妥当な時間内に応答を送信できなくなり、Web アプリケーションがフリーズしたように見える可能性があることに注意してください。

どのようなタイプの CPU 集中型コードを念頭に置いていましたか? このシナリオを処理するには多くの方法があります。

于 2013-03-19T14:52:00.073 に答える
0

「CPUを集中的に使用する」とは、プロセスが完了するまでに時間がかかることを意味していると思いますか? Web アプリケーションでは、数分以上かかるものはすべて非同期で実行する必要があります。HTTP の要求/応答モデルでは、(多くの理由から) 要求を行うクライアントに迅速に応答することが最善です。

長時間実行されるプロセスの場合、「非同期」とは、AJAX を使用することを意味するものではありません。これは、他のプロセスと同様に要求/応答であるためです。

この場合の「非同期」とは、CPU を集中的に使用するタスクを処理する別のサーバー側プロセスが必要であり、Web アプリケーションは実行のためにタスクをキューに入れ、タスクのステータスをチェックするだけのことを意味します。人々はそれを探します。その後、タスクの完了後にタスクの結果を報告できます。

したがって、アーキテクチャの基本的な概要は次のようになります。

  1. Web アプリケーションのユーザーは、ボタンをクリックして「タスクを開始」します。
  2. Web アプリケーションは、タスクがキューに入れられたことを示すレコードをデータベース テーブルに挿入します (キューに入れられたユーザーのユーザー ID、タイム スタンプ、その他必要な情報が含まれる場合があります)。
  3. 別のスケジュールされたアプリケーション (コンソール アプリケーションまたは Windows サービスである可能性が最も高い) が永続的に実行されています。(常時実行中の Windows サービスでタイマーを使用するか、コンソール アプリケーションとして数分おきなどに何度も実行するようにスケジュールします。) このアプリケーションは、データベース テーブルをチェックして、新しいキュー タスクを探します。
  4. アプリケーションがタスクを認識すると、データベースで「開始済み」としてマークし (アプリケーションの後続の実行で同じタスクを並行して実行しようとしないように)、実行を開始します。
  5. Web アプリケーションは、データベース テーブルでタスクのステータスを確認し、それを要求したユーザーに表示できるため、ユーザーはタスクがまだ実行中であることを確認できます。
  6. タスクが完了すると、データベース テーブルのタスク レコードが更新され、結果がどこかに保存されます。(結果がどうなるかによる。データ?データベース内。ある種のレポート ファイル?どこかにファイルとして保存。それはすべてあなた次第です。)
  7. Web アプリケーションは、完了したタスクのステータスと記録されたその他の情報を確認でき、ユーザーはタスクの出力を表示するように要求できます。

ここで覚えておくべき主なことは、責任を2 つのアプリケーションに分割することです。Web アプリケーションは、ユーザー インターフェイスを提供することを目的としています。Web アプリケーションは、長時間実行されるバックグラウンド タスクには適していません。そのため、その責任は、その目的により適した別のアプリケーションに移されます。2 つのアプリケーションは、共有データベースを介して連携します。

于 2013-03-19T15:15:20.370 に答える