عند مقارنة سياسات بولي المتزامنة وغير المتزامنة في MVVMCROSS ، أو أي تطبيق .NET ، تلعب العديد من الاختلافات والاعتبارات في الأداء:
سياسات متزامنة
1. حظر الطبيعة: سياسات متزامنة تمنع ، مما يعني أنها تنفذ المهام بالتتابع وانتظر كل مهمة لإكمالها قبل الانتقال إلى التالي. يمكن أن يؤدي ذلك إلى أداء أبطأ في السيناريوهات التي تتضمن عمليات إدخال/إخراج أو مهام طويلة الأمد ، حيث يتم ربط الخيط في انتظار الانتهاء من العملية [4] [6].
2. استخدام الموارد: عادة ما تؤدي البرمجة المتزامنة إلى استخدام الموارد الأعلى لأن المواضيع يتم الاحتفاظ بها في حالة الانتظار ، وتستهلك الذاكرة وربما تؤدي إلى استنفاد تجمع الخيوط إذا لم تتم إدارتها بشكل صحيح [4] [2].
3. قابلية التوسع: النهج المتزامنة أقل قابلية للتطوير مقارنة مع النهج غير المتزامنة ، وخاصة في البيئات التي تتطلب التزامن عالي. يمكن أن تصبح اختناقات في الأنظمة التي تتعامل مع طلبات متعددة في وقت واحد [4].
السياسات غير المتزامنة
1. الطبيعة غير المحظورة: السياسات غير المتزامنة غير محبوطة ، مما يسمح للمهام بالعمل بشكل مستقل دون ربط المواضيع. هذا يحسن الاستجابة وقابلية التوسع ، خاصة في السيناريوهات التي تتضمن عمليات الإدخال/الإخراج أو طلبات الشبكة [4] [3].
2. كفاءة الموارد: تعمل البرمجة غير المتزامنة على تحسين تخصيص الموارد من خلال إصدار مؤشرات الترابط إلى التجمع أثناء انتظار عمليات إكمال العمليات ، مما يقلل من استخدام الذاكرة وتحسين استخدام وحدة المعالجة المركزية [4] [2].
3. قابلية التوسع والإنتاجية: السياسات غير المتزامنة قابلة للتطوير للغاية ويمكنها التعامل مع عدد كبير من الطلبات المتزامنة بكفاءة. إنها مفيدة بشكل خاص في التطبيقات الواقعية حيث تكون عبء العمل عدم القدرة على التنبؤ والتوزيع غير المتكافئ شائعين [2] [4].
مقارنة الأداء
- الإنتاجية وقابلية التوسع: توفر السياسات غير المتزامنة عمومًا إنتاجية وقابلية للتوسع بشكل عام مقارنة بالسياسات المتزامنة ، خاصة في السيناريوهات ذات أعباء العمل غير المتوقعة أو متطلبات التزامن العالية [2] [4].
- استهلاك الموارد: تميل السياسات غير المتزامنة إلى انخفاض بصمة ذاكرة واستخدام أفضل وحدة المعالجة المركزية مقارنة بالسياسات المتزامنة ، والتي يمكن أن تؤدي إلى مزايا كبيرة في الأداء في البيئات المقيدة بالموارد [2] [4].
-الاعتبارات العامة: في حين أن الكود غير المتزامن يمكن أن يقدم النفقات العامة الإضافية بسبب تبديل السياق وإدارة المهام ، فإن هذا النفقات العامة غالباً ما تفوق بفوائد التنفيذ غير المحظور واستخدام الموارد الفعال في سيناريوهات الإدخال/الإخراج [6] [2].
تفاصيل بولي
يدعم بولي كل من السياسات المتزامنة وغير المتزامنة ، مما يوفر طرقًا مثل "التنفيذ" للعمليات المتزامنة و "التنفيذيين التنفيذيين" للسيارات غير المتزامنة [3]. عند استخدام Polly في MVVMcross أو أطر المماثلة ، يعتمد الاختيار بين السياسات المتزامنة وغير المتزامنة على المتطلبات المحددة لتطبيقك ، مثل ما إذا كان يتضمن عمليات I/O أو يحتاج إلى التعامل مع حجم كبير من الطلبات المتزامنة.
باختصار ، توفر سياسات Polly غير المتزامنة عمومًا أداءً فائقًا وقابلية للتوسع مقارنة بالسياسات المتزامنة ، خاصة في السيناريوهات التي تتضمن عمليات الإدخال/الإخراج أو التزامن العالي. ومع ذلك ، قد تظل السياسات المتزامنة مناسبة للمهام البسيطة المتتابعة حيث تكون القدرة على التنبؤ والتنفيذ المباشر أكثر أهمية من قابلية التوسع.
الاستشهادات:[1]
[2] https://stackoverflow.com/questions/55823184/does-asynchronous-model-real-benefits-in-throughput-against-properly-conf
[3] https://www.nuget.org/packages/polly/7.2.4
[4]
[5] https://stackoverflow.com/questions/59456197/using-polly-for-a-try-attempt-from-an-async-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-unting-tonding-to-costs-of-async-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet