logo

Görev ve Konu C#

Giriiş:

Asenkron Programlama, modern yazılım geliştirmede popüler bir trend haline geldi. C#'ta Eşzamansız Programlama için yaygın olarak kullanılan iki teknik şunlardır: Görevler Ve İş Parçacığı . Ancak birçok geliştiricinin, aralarındaki farklar konusunda kafası karışıktır. Görevler Ve İş Parçacığı ve her birinin ne zaman kullanılacağı. Bu yazıda aralarındaki farkları göreceğiz. Görevler Ve İş Parçacığı C# dilinde ve her birinin ne zaman kullanılacağına ilişkin yönergeler sağlayın.

Görevler Nelerdir?

C#'ta Görev, kodu eşzamansız olarak çalıştırmak için daha yüksek düzeyde bir soyutlamadır. Görev, eşzamansız olarak yürütülmesi gereken bir iş birimini belirtir ve bir değer döndürebilir veya döndürmeyebilir. Bir Görev genellikle aşağıdakilerin yardımıyla oluşturulur: Görev Fabrikası sınıfı Görevleri oluşturmak ve yürütmek için çeşitli yöntemler sağlayan .

Görevler bir kullanır Konu havuzu işlerini yürütmek için; bu, Görevlerin iş parçacıklarından birinde yürütüldüğü anlamına gelir. Konu havuzu. Bir Görev oluşturulduğunda, İş parçacığı havuzunun kuyruğu ve havuzdaki İş Parçalarından biri Görevi yürütmek için kullanılır. Görev tamamlandıktan sonra İş Parçacığı, başka bir Görev için kullanılmaya hazır şekilde havuza geri döner.

Görevlerin Konulara göre çeşitli avantajları vardır:

  • Görevler Konulardan daha hafiftir. Görevler, iş parçacıklarına kıyasla bellek ve CPU zamanı gibi daha az sistem kaynağı kullanır.
  • Görevleri yönetmek Konulardan daha kolaydır. Görevler, eşzamansız programlama için daha yüksek düzeyde bir soyutlama sağlar; bu da kod yazmayı ve bakımını kolaylaştırır.
  • Görevler ayrıca belirli durumlarda Konulardan daha iyi performans sağlayabilir. Bunun nedeni Görevler'in bir Konu havuzu , her iş birimi için Konuları oluşturup yok etmekten daha verimli bir şekilde İş Parçalarını yönetebilir.

Konular nedir?

C#'ta bir İş Parçacığı, kodu eşzamansız olarak çalıştırmak için kullanılan daha düşük düzeyli bir soyutlamadır. Bir İş Parçacığı, kodu eşzamansız olarak yürütmek için kullanılan işletim sistemi düzeyinde bir yapıyı temsil eder. Bir İş Parçacığı bir değer döndürebilir veya döndürmeyebilir ve genellikle şunun yardımıyla oluşturulur: Konu sınıfı .

İş parçacıkları, bellek ve CPU zamanı gibi kendi kaynaklarını kullanır ve genellikle geliştirici tarafından açıkça oluşturulup yok edilir. Bir İş parçacığı oluşturulduğunda, hemen yürütülmeye başlar ve açıkça durduruluncaya veya işini tamamlayana kadar yürütmeye devam eder.

Konuların Görevlere kıyasla çeşitli dezavantajları vardır:

  • Konular Görevlerden daha ağırdır. İş parçacıkları, Görevlere kıyasla bellek ve CPU zamanı gibi daha fazla sistem kaynağı kullanır.
  • Konuları yönetmek Görevlere göre daha zordur. İş parçacıkları daha düşük seviyeli programlama ve senkronizasyon gerektirir, bu da kod yazmayı ve bakımını zorlaştırır.
  • İş parçacıkları ayrıca belirli durumlarda Görevlerden daha kötü performans sağlayabilir. Bunun nedeni, her iş birimi için İş Parçacığı oluşturmanın ve yok etmenin, özellikle yürütülecek çok sayıda iş birimi olduğunda verimsiz olabilmesidir.

Görevler Ne Zaman Kullanılır:

Bir iş birimini eşzamansız olarak gerçekleştirmek istediğinizde ve yürütme üzerinde ayrıntılı kontrole ihtiyacınız olmadığında görevler önerilir. Görevler, G/Ç işlemleri veya basit hesaplamalar gibi küçük ve kısa ömürlü iş birimlerini yürütmek için mükemmeldir.

Görevler ayrıca bir uygulamanın avantajlarından yararlanmak istediğinizde de önerilir. Konu havuzu . A Konu havuzu her iş birimi için Konuları oluşturup yok etmektense Konuları daha verimli bir şekilde yönetebilir. Bu, özellikle yürütülecek çok sayıda iş birimi olduğunda daha iyi performansla sonuçlanabilir.

Görevler, eşzamansız işlemleri zincirlemek istediğinizde de kullanışlıdır. Görevler, birbiri ardına yürütülen eşzamansız işlemler zinciri oluşturmak için bekleme operatörü kullanılarak birleştirilebilir. Bir dizi bağımlı eşzamansız işlem gerçekleştirmek istediğinizde bu önemli olabilir.

Konular Ne Zaman Kullanılır:

Yürütme üzerinde ayrıntılı kontrole ihtiyaç duyduğunuzda ve Görevler tarafından sağlanan daha yüksek düzey soyutlamalarla karşılanamayan özel gereksinimleriniz olduğunda C#'taki iş parçacıkları kullanılmalıdır. Threads'in daha iyi bir seçim olabileceği bazı durumlar şunlardır:

Uzun Ömürlü İş Birimleri:

İş parçacıkları, arka plan hizmetleri veya yürütme üzerinde daha fazla kontrol gerektiren karmaşık hesaplamalar gibi uzun ömürlü iş birimleri için daha uygundur. Bu gibi durumlarda, genellikle kodun yürütülmesini Görevler'in sağladığından daha ayrıntılı bir şekilde kontrol etmek gerekir.

İş Parçacığı Yürütme Üzerinde İnce Taneli Kontrol:

Konular ayarlamanıza izin verir Konu öncelikleri, Konu senkronizasyonu , Ve Konu iptal ediliyor . Kodunuzun nasıl yürütüleceğini özelleştirmeniz gerekiyorsa Threads, bunu yapmanıza olanak tanıyan düşük düzeyli bir arayüz sağlar.

Düşük Seviye Programlama:

1 milyonun 10'u

İş parçacıkları daha düşük düzeyde programlama ve senkronizasyon gerektirir; Görevler tarafından sağlanan daha yüksek düzeydeki soyutlamalarla karşılanamayan özel gereksinimleriniz varsa bu yararlı olabilir.

Yönetilmeyen Kodla Birlikte Çalışma:

Yönetilmeyen kodla birlikte çalışmanız gerekiyorsa Threads tek seçenek olabilir. Bu gibi durumlarda, kodunuzun yönetilmeyen kodla doğru şekilde çalıştığından emin olmak için Thread'leri manuel olarak oluşturup kontrol etmeniz gerekebilir.

Performansla İlgili Hususlar:

Bazı durumlarda, özellikle yürütülecek çok sayıda iş birimi olduğunda, her iş birimi için İş Parçacığı oluşturmak ve yok etmek verimsiz olabilir. Bu gibi durumlarda, birden fazla iş birimi için yeniden kullanılabildiğinden İş Parçacığı kullanmak daha iyi bir seçenek olabilir.