Task Parallel Library (TPL)¶
Giriş¶
Task Parallel Library (TPL), .NET uygulamalarında paralel programlama ve eşzamanlılık için güçlü bir framework'tür. Paralel işlemleri kolaylaştırmak, performansı artırmak ve kod karmaşıklığını azaltmak için tasarlanmıştır.
TPL'in Önemi¶
- Performans
- Çok çekirdekli işlemcilerden yararlanma
- Paralel işlem optimizasyonu
- Kaynak kullanımı optimizasyonu
-
Ölçeklenebilirlik
-
Kod Kalitesi
- Daha temiz kod yapısı
- Daha az boilerplate kod
- Daha iyi hata yönetimi
-
Daha kolay bakım
-
Üretkenlik
- Kolay kullanım
- Zengin API
- Entegre hata yönetimi
- İleri seviye özellikler
TPL Özellikleri¶
- Task Sınıfı
- Asenkron işlemler
- İptal desteği
- Hata yönetimi
-
Continuation desteği
-
Parallel Sınıfı
- Parallel.For
- Parallel.ForEach
- Parallel.Invoke
-
Paralel LINQ (PLINQ)
-
Dataflow Kütüphanesi
- Pipeline işlemleri
- Mesaj geçişi
- Veri dönüşümü
- Akış kontrolü
TPL Kullanımı¶
-
Task Oluşturma
public class DataProcessor { public async Task ProcessDataAsync() { // Basit task oluşturma var task = Task.Run(() => HeavyComputation()); // Task ile çalışma await task; // Task sonucu alma var result = await Task.Run(() => ComputeResult()); } private void HeavyComputation() { // Ağır hesaplama işlemi Thread.Sleep(1000); } private int ComputeResult() { // Sonuç hesaplama return 42; } }
-
Task Continuation
public class DataProcessor { public async Task ProcessWithContinuationAsync() { var task = Task.Run(() => GetData()) .ContinueWith(t => ProcessData(t.Result)) .ContinueWith(t => SaveData(t.Result)); await task; } private string GetData() { // Veri alma return "data"; } private string ProcessData(string data) { // Veri işleme return data.ToUpper(); } private void SaveData(string data) { // Veri kaydetme } }
-
Parallel.For Kullanımı
public class ParallelProcessor { public void ProcessInParallel() { var data = new int[1000]; Parallel.For(0, data.Length, i => { data[i] = ComputeValue(i); }); } private int ComputeValue(int index) { // Değer hesaplama return index * 2; } }
-
Parallel.ForEach Kullanımı
public class ParallelProcessor { public void ProcessCollectionInParallel() { var items = Enumerable.Range(0, 1000).ToList(); var results = new ConcurrentBag<int>(); Parallel.ForEach(items, item => { var result = ProcessItem(item); results.Add(result); }); } private int ProcessItem(int item) { // Öğe işleme return item * 2; } }
-
Dataflow Kullanımı
public class DataflowProcessor { public async Task ProcessWithDataflowAsync() { var transformBlock = new TransformBlock<int, string>(n => { return n.ToString(); }); var actionBlock = new ActionBlock<string>(s => { Console.WriteLine(s); }); transformBlock.LinkTo(actionBlock, new DataflowLinkOptions { PropagateCompletion = true }); for (int i = 0; i < 10; i++) { transformBlock.Post(i); } transformBlock.Complete(); await actionBlock.Completion; } }
TPL Best Practices¶
- Task Tasarımı
- Küçük ve odaklı tasklar
- İptal desteği
- Hata yönetimi
-
Kaynak temizleme
-
Performans
- Task boyutu optimizasyonu
- Paralellik derecesi ayarı
- Kaynak kullanımı
-
Ölçeklenebilirlik
-
Güvenlik
- Thread-safe kod
- Veri senkronizasyonu
- Kaynak yönetimi
-
Hata izolasyonu
-
Monitoring
- Task durumu takibi
- Performans metrikleri
- Hata izleme
- Kaynak kullanımı
Mülakat Soruları¶
Temel Sorular¶
- TPL nedir ve neden kullanılır?
-
Cevap: Task Parallel Library (TPL), .NET uygulamalarında paralel programlama ve eşzamanlılık için güçlü bir framework'tür. Paralel işlemleri kolaylaştırmak, performansı artırmak ve kod karmaşıklığını azaltmak için tasarlanmıştır.
-
TPL'in temel özellikleri nelerdir?
-
Cevap:
- Task sınıfı
- Parallel sınıfı
- Dataflow kütüphanesi
- Asenkron programlama desteği
- Paralel LINQ
-
TPL'in avantajları nelerdir?
-
Cevap:
- Performans artışı
- Kod kalitesi
- Üretkenlik
- Ölçeklenebilirlik
- Kolay kullanım
-
Task ve Thread arasındaki fark nedir?
-
Cevap: Task, daha yüksek seviyeli bir soyutlamadır ve thread havuzunu kullanır. Thread ise daha düşük seviyeli bir işletim sistemi kaynağıdır. Task'lar daha az kaynak kullanır ve daha kolay yönetilir.
-
TPL'de task tipleri nelerdir?
- Cevap:
- Task: Genel amaçlı task
- Task
: Sonuç döndüren task - ValueTask: Hafif task
- TaskCompletionSource: Manuel task kontrolü
Teknik Sorular¶
- Task nasıl oluşturulur?
-
Cevap:
public class TaskCreator { public Task CreateTask() { return Task.Run(() => { // İşlem }); } public Task<int> CreateTaskWithResult() { return Task.Run(() => { return 42; }); } }
-
Task continuation nasıl kullanılır?
-
Cevap:
public class TaskContinuation { public async Task ProcessWithContinuation() { await Task.Run(() => GetData()) .ContinueWith(t => ProcessData(t.Result)) .ContinueWith(t => SaveData(t.Result)); } }
-
Parallel.For nasıl kullanılır?
-
Cevap:
public class ParallelProcessor { public void ProcessInParallel() { var data = new int[1000]; Parallel.For(0, data.Length, i => { data[i] = ComputeValue(i); }); } }
-
Dataflow nasıl kullanılır?
-
Cevap:
public class DataflowProcessor { public async Task ProcessWithDataflow() { var transformBlock = new TransformBlock<int, string>(n => n.ToString()); var actionBlock = new ActionBlock<string>(s => Console.WriteLine(s)); transformBlock.LinkTo(actionBlock); for (int i = 0; i < 10; i++) { transformBlock.Post(i); } transformBlock.Complete(); await actionBlock.Completion; } }
-
TPL'de hata yönetimi nasıl yapılır?
- Cevap:
public class TaskErrorHandler { public async Task HandleErrors() { try { await Task.Run(() => RiskyOperation()); } catch (Exception ex) { // Hata yönetimi } } private void RiskyOperation() { // Riskli işlem } }
İleri Seviye Sorular¶
- TPL'de performans optimizasyonu nasıl yapılır?
-
Cevap:
- Task boyutu optimizasyonu
- Paralellik derecesi ayarı
- Kaynak kullanımı
- Ölçeklenebilirlik
- Thread pool yönetimi
-
TPL'de deadlock nasıl önlenir?
-
Cevap:
- Async/await kullanımı
- Task.WhenAll kullanımı
- Timeout mekanizmaları
- Kaynak sıralaması
- Deadlock tespiti
-
TPL ile distributed sistemler nasıl yönetilir?
-
Cevap:
- Task dağıtımı
- Load balancing
- Failover stratejileri
- Consistency yönetimi
- Monitoring
-
TPL'de monitoring nasıl yapılır?
-
Cevap:
- Task durumu takibi
- Performans metrikleri
- Hata izleme
- Kaynak kullanımı
- Profiling
-
TPL'de scaling nasıl yapılır?
- Cevap:
- Task parçalama
- Paralellik derecesi ayarı
- Kaynak yönetimi
- Load balancing
- Performance tuning