.Net ile Task Parallel Library

recep orhan
2 min readOct 31, 2021

TPL ‘in amacı concurrency ve parallelism işlemlerini basitleştirerek geliştiricilerin çok daha üretken olmasını sağlamaktır. TPL System.Threading ve System.Threading.Tasks namespace’i altında bulunan bir dizi tip ve metottur. İşin bölünmesi, thread’lere ayrıştırılması, threadlerin yönetilmesi, cancellation desteği, durum yönetimi gibi bir çok işi yapar.

Microsoft dokümanında da yazdığı gibi TPL her kod için uygun değildir. İşin bölünmesi, threadlere ayrıştırılması, threadlerin yönetilmesi gibi işler bir maliyete sahiptir. Eğer döngüye alacağınız liste yeteri kadar büyük değilse yada yaptırdığınız işin komplikesi düşük ise TPL normal döngülere göre daha yavaş çalışacaktır. TPL’ mi yoksa düz döngü mü kullanacağına developeren karar vermesi gerekmektedir. Bazen aynı kodun iki farklı şekilde kodlanıp test edilerek karar verilmesi gerekmektedir.

Bu kısa girişten sonra bir .net örneği ile TPL’i inceleyelim. Örnek senaryoda bir döngüye sokarak belirli sayıda PDF dokümanı oluşturacağız. Package Manager Console’ a aşağıdaki kodu yazarak Aspose.PDF nuget paketini yüklüyoruz.

PM> Install-Package Aspose.PDF

Aspose.PDF kütüphanesi pdf doküman oluşturmada bize yardımcı olacak.

Pdf doküman oluşturma örneğini kullanarak kodları kopyalayıp CreatePDF metodu içerisine yapıştırıyoruz. Buradaki kodları satır satır incelemeye gerek duymadım çünkü amacımız pdf dosya oluşturmak, sadece çıktıya odaklanıyoruz. İsterseniz kütüphanenin sayfasında dokümanı ve örnekleri inceleyebilirsiniz.

Metodumuzu yazdıktan sonra dosyaların kaydedileceği NewFolder ve NewFolder1 klasörlerini oluşturuyoruz. İlgili metodu Parallel.ForEach ve foreach ile 10 kere kullanalım. Toplam zamanı ve Thread’leri yazdırarak kullanılan kaynakları görelim.

CTRL + f5 ile kodu debugsız çalıştırdığımızda çıktı şöyle olacaktır.

Foreach ile Parallel.ForEach arasında 10 saniyelik bir fark oluşmaktadır. Foreach’te tüm işlemler tek thread üzerinden ve sırayla yapılırken Parallel.Foreach’te her biri iş için farklı thread kullanılmıştır.

TPL kullanmak kodunuzun çalışma süresini düşürebileceği gibi yersiz kullanılırsa normal döngüye göre daha yavaş bir çıktı alınabilir. Ayrıca TPL kullanmak kodun okunabilirliğini düşürecektir. Ekstra bir öğrenme maliyeti olduğu için yetişmiş insan kaynağı bakımından da bir ihtiyaç doğuracak ve bakım maliyetlerini arttırabilecektir. Tıpkı monolith ve microservice tercihinde olduğu gibi yapılacak işe göre iyi analiz yapılmalıdır. Bazen klasik döngü kullanmak yazılım için çok daha ı-uygun olacaktır.

TPL’i efektif olarak kullanabilmek için locks, deadlocks, race conditions, cancellation tokens gibi kavramların bilinmesi gerekmektedir. Microsoft sayfasından dokumanı incelenip örnek uygulamalar sayfasından kodları inceleyerek TPL bilginizi ileri noktalara taşıyabilirsiniz.

Örneği github adresinden indirebilirsiniz.

--

--