วิวัฒนาการของ การเขียนโปรแกรมแบบหลายเธรดใน .NET

ในช่วง 20 ปีที่ผ่านมา .NET และ C# ได้พัฒนาขึ้นใหม่ ๆ และมีวิธีการที่สร้างสรรค์ในการเขียนโปรแกรมแบบหลายเธรดได้ถูกนำเสนอ .NET และ .NET Core ได้เพิ่มคุณสมบัติใหม่ ๆ เพื่อรองรับการเขียนโปรแกรมแบบอะซิงโครนัส และยังมีชนิดข้อมูลใหม่ ๆ ที่เพิ่มเข้ามาเพื่อรองรับภาษา .NET ที่ทันสมัย .NET Framework 4.0 และ C# 5 ได้นำการปรับปรุงที่สำคัญที่สุดมารวมถึงไลบรารี Task Parallel Library (TPL) การรวบรวมที่ปลอดภัยสำหรับเธรด และคำสำคัญ async และ await

ในบทนี้จะนำเสนอแนวคิดและคุณสมบัติที่สำรวจในเชิงลึกในบทถัดไปแนวคิดเหล่านี้รวมถึง thread pool ของ .NET การเขียนโปรแกรมแบบอะซิงโครนัสด้วย async และ await การรวบรวมที่พร้อมกัน และการทำงานแบบขนาน เราจะเริ่มต้นโดยการค้นพบว่าเมื่อใดและเหตุใดที่การเขียนโปรแกรมแบบหลายเธรดถูกเพิ่มเข้ามาใน .NET และ C# แล้วจึงสร้างตัวอย่างในทางปฏิบัติบางส่วนเกี่ยวกับวิธีการใช้แนวคิดใหม่เหล่านี้ สุดท้ายเราจะสรุปบทโดยการอภิปรายว่าเมื่อใดที่จะใช้คุณสมบัติใหม่เหล่านี้ในโครงการของคุณเอง สิ่งสำคัญคือต้องเลือกเครื่องมือที่ดีที่สุดสำหรับสถานการณ์จริงทุกสถานการณ์


ความต้องการทางเทคนิค:

เพื่อให้สามารถทำตามตัวอย่างในบทนี้ได้ ซอฟต์แวร์ต่อไปนี้แนะนำสำหรับผู้ใช้ Windows:

  • Visual Studio 2022 เวอร์ชัน 17.0 ขึ้นไป
  • .NET 6
  • หากคุณต้องการใช้โปรเจกต์ WorkingWithTimers คุณจะต้องติดตั้งชุดทำงาน Visual Studio สำหรับ .NET desktop development

แม้จะมีการแนะนำนี้ ถ้าคุณมี .NET 6 ติดตั้งแล้ว คุณสามารถใช้โปรแกรมแก้ไขที่คุณชอบได้เช่น Visual Studio 2022 สำหรับ Mac บน macOS 10.13 ขึ้นไป, JetBrains Rider หรือ Visual Studio Code ก็สามารถใช้ได้เช่นกัน


.NET threading ตลอดหลายปีที่ผ่านมา:

การทำงานกับเธรดใน .NET และ C# ได้พัฒนาขึ้นมากตั้งแต่ .NET Framework 1.0 และ C# 1.0 ถูกแนะนำในปี 2002 แนวคิดส่วนใหญ่ที่อภิปรายใน Chapter 1 เกี่ยวกับ System.Threading.Thread ยังคงใช้ได้จนถึงทุกวันนี้ .NET 6 และสามารถใช้ได้ในบางกรณีที่ง่าย แต่มีโซลูชันที่ทันสมัยและสง่างามมากขึ้นที่มีอยู่ในวันนี้


C# 4 และ .NET Framework 4.0

ในปี 2010, Microsoft ได้ออก Visual Studio 2010 พร้อมกับ C# 4 และ .NET Framework 4.0 แม้ฟีเจอร์ของภาษาและเฟรมเวิร์กบางส่วนเช่น generics, lambda expressions และ anonymous methods ที่ออกมาก่อนหน้านี้จะช่วยให้มีคุณสมบัติการทำงานแบบหลายเธรดที่ดียิ่งขึ้น, การออกในปี 2010 นี้เป็นการปล่อยที่สำคัญที่สุดสำหรับการทำงานแบบหลายเธรดตั้งแต่ปี 2002 .NET Framework รวมถึงคุณสมบัติต่อไปนี้ที่จะอธิบายเพิ่มเติมในส่วนถัดไป:

  • Thread-safe collections: คอลเลกชันนี้ถูกเพิ่มเข้าไปใน System.Collections.Concurrent namespace เพื่อให้การเข้าถึงข้อมูลในโค้ดแบบหลายเธรดที่ปลอดภัย
  • Parallel class: ฟีเจอร์นี้สนับสนุนการวนลูปขนานผ่าน Parallel.For และ Parallel.ForEach และการดำเนินการขนานผ่าน Parallel.Invoke