2011-02-24 8 views
0

AIには、シーケンスワークフローを含むWF 4アプリケーションがあります。このワークフローには、3つの連続したアクティビティを持つシーケンスを含むParallelForがあります。 これらのアクティビティの最初は計算バインド(証明書署名要求を生成)、2番目はIOバウンド(電子メール送信)、3番目のタスクはIOバウンド(データベースを更新)です。ParallelForに含まれるWFシーケンス内のすべてのアクティビティをAsyncCodeActivityにする必要がありますか?

これらはすべてCodeActivitiesとして最初に開発され、本当にマルチスレッドモードで動作させるにはAsyncCodeActivitiesである必要があります。だから私は、最初の計算にバインドされたアクティビティをAsyncCodeActivityとして変更し、それがマルチスレッドで実行されているのがわかります。 (少なくとも、Devマシン上ではプロセッサの使用率が非常に高くなっているため、マルチスレッドで動作していると思われます)

ただし、後続のタスクは非同期のCodeActivitiesとして残ります。次のように私の質問は以下のとおりです。

  1. は、私は(私はこのケースになります疑いがある)だけでなく非同期に2番目と3番目の活動を変換する必要がありますか?

  2. もしそうでなければ、最初にAsyncCodeActivitiyで2番目と3番目がないときに、は実際にがParallelFor内でどのように実行されますか?

答えて

1

すべての子アクティビティが並行している場合、それらは同時にスケジュールされます。これはキューに入れられることを意味し、スケジューラはその時に1つだけを実行します。非同期アクティビティの場合、開始がスケジュールされ、他のスレッドが生成され、終了部分が完了したことを通知されたときに終了部分がスケジューリングされ、スケジューラがそのスレッドに近づくと実際に実行されることを意味します。

これは、他の作業が多いサーバーで実行されるワークフローでは、非同期アクティビティがネットワークやデータベースIOなどの非同期IOに最もよく使用されることを意味します。既に使用中のシステムに複数のCPUスレッドを追加するサーバでは、処理が遅くなることさえあります。ワークフローがクライアント上で実行される場合は、非同期IOとCPUの両方がうまく動作します。

+0

ああ、非同期としてシーケンス内で計算力の強い最初のアクティビティを実行し、シーケンス内の2つの後続のアクティビティを非同期として行う方がよいでしょう。 – Redeemed1

+0

サーバー上でこれを実行しており、適切な妥当な作業負荷が必要であると想定している場合。 – Maurice

関連する問題