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-bound [6] [2]

เฉพาะพอลลี่

พอลลี่สนับสนุนทั้งนโยบายแบบซิงโครนัสและแบบอะซิงโครนัสโดยให้วิธีการเช่น `ดำเนินการ` สำหรับการดำเนินการแบบซิงโครนัสและ `executeasync` สำหรับแบบอะซิงโครนัส [3] เมื่อใช้พอลลี่ใน MVVMCROSS หรือเฟรมเวิร์กที่คล้ายกันการเลือกระหว่างนโยบายแบบซิงโครนัสและแบบอะซิงโครนัสขึ้นอยู่กับข้อกำหนดเฉพาะของแอปพลิเคชันของคุณเช่นไม่ว่าจะเกี่ยวข้องกับการดำเนินงาน 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-really-give-benefits-in-throughput-against-properly-conf
[3] https://www.nuget.org/packages/polly/7.2.4
[4] https://kissflow.com/application-development/asynchronous-vs-synchronous-programming/
[5] https://stackoverflow.com/questions/59456197/using-polly-for-a-retry-attempt-from-an-async-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-understanding-the-costs-of-async-async-async-
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet