Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCrossで同期ポリと非同期ポリシーを使用することの間にパフォーマンスの違いはありますか


MVVMCrossで同期ポリと非同期ポリシーを使用することの間にパフォーマンスの違いはありますか


MVVMCrossまたは任意の.NETアプリケーションでの同期と非同期のポリーポリシーを比較する場合、いくつかのパフォーマンスの違いと考慮事項が発生します。

###同期ポリシー

1。自然のブロック:同期ポリシーはブロックされています。つまり、タスクを順番に実行し、各タスクが完了するのを待ってから次のタスクに進みます。これにより、操作が終了するのを待っているスレッドが縛られているため、I/O操作や長期にわたるタスクを含むシナリオのパフォーマンスが低下する可能性があります[4] [6]。

2。リソースの使用率:同期プログラミングは通常、スレッドが待機状態に保持され、メモリを消費し、適切に管理しないとスレッドプールの疲労につながる可能性があるため、より高いリソース使用量をもたらします[4] [2]。

3.スケーラビリティ:同期アプローチは、特に高い並行性を必要とする環境では、非同期のアプローチと比較してスケーラブルではありません。それらは、複数のリクエストを同時に処理するシステムのボトルネックになる可能性があります[4]。

###非同期ポリシー

1。非ブロッキングの性質:非同期ポリシーは非ブロッキングであり、タスクがスレッドを縛らずに独立して実行できるようにします。これにより、特にI/O操作またはネットワークリクエストを含むシナリオ[4] [3]を含むシナリオでは、応答性とスケーラビリティが向上します。

2。リソース効率:非同期プログラミング操作が完了するのを待っている間にスレッドをプールに戻し、メモリの使用量を削減し、CPU使用率を改善することにより、リソース割り当てを最適化します[4] [2]。

3。スケーラビリティとスループット:非同期ポリシーは非常にスケーラブルであり、多数の同時リクエストを効率的に処理できます。それらは、ワークロードの予測不可能性と不均一な分布が一般的である現実世界のアプリケーションで特に有益です[2] [4]。

###パフォーマンスの比較

- スループットとスケーラビリティ:非同期ポリシーは一般に、特に予測不可能なワークロードまたは高い並行性要件を備えたシナリオで、同期のスループットとスケーラビリティをより良いスループットとスケーラビリティを提供します[2] [4]。

- リソースの消費:非同期ポリシーは、同期のポリシーと比較して、メモリフットプリントが低く、CPU使用率が低い傾向があり、リソースが制約された環境で大きなパフォーマンスの利点をもたらす可能性があります[2] [4]。

- オーバーヘッドの考慮事項:非同期コードは、コンテキストの切り替えとタスク管理のために追加のオーバーヘッドを導入できますが、このオーバーヘッドは、非ブロッキング実行の利点とI/Oバウンドシナリオでの効率的なリソース利用の利点によってしばしば上がります[6] [2]。

Pollyの詳細

Pollyは、同期ポリシーと非同期ポリシーの両方をサポートし、同期操作の「実行」や非同期の操作に「ExecueSync」などの方法を提供します[3]。 MVVMCrossまたは同様のフレームワークでPollyを使用する場合、同期ポリシーと非同期ポリシーを選択することは、I/O操作が含まれるか、大量の同時リクエストを処理する必要があるかなど、アプリケーションの特定の要件に依存します。

要約すると、非同期ポリーポリシーは、一般に、特にI/O操作または高い並行性を含むシナリオで、同期のパフォーマンスとスケーラビリティを提供します。ただし、同期ポリシーは、予測可能性と単純な実行がスケーラビリティよりも重要である単純で順次タスクに適している場合があります。

引用:
[1] http://www.thepollyproject.org/2019/02/13/custom-policies-for-all-execution-types-custom-policies-part-iv/
[2] https://stackoverflow.com/questions/55823184/does-asynchronous-model lallyly-give-genefits-in-throulput-against-preperlyly-conf
[3] https://www.nuget.org/packages/polly/7.2.4
[4] https://kissflow.com/application-development/asynchronous-vs-synchronogromming/
[5] https://stackoverflow.com/questions/59456197/using-polly-for-a-tretry-Attempt-from-an-async-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-purformance-ununtanding-the-async-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet