C#'ta Çoklu Kullanım: Faydalar, Temel Bilgiler ve En İyi Uygulamalar

Yayınlanan: 2023-06-01

İçindekiler

Çok İş parçacıklı Programlama Nedir?

Multithreading, yazılım mühendisliğinde temel bir kavramdır. C#'ta çok iş parçacıklı programlama, .NET Framework ile çalışan yazılım geliştiriciler için çok önemlidir. Geliştiriciler , karmaşık ve duyarlı uygulamaları verimli bir şekilde oluşturmalarına izin verdiği için C#'ta çoklu iş parçacığı özelliğini yaygın olarak kullanır .

Bu blog c# multithreading'e genel bir bakış sağlarken aynı zamanda programcıların nasıl kolayca thread oluşturup yönetebileceklerine de bakıyor. Ayrıca çoklu iş parçacığı kullanmanın yararlarını ve C#'ta bulunan farklı iş parçacığı modellerini içerir.

Multithreaded Programlamanın Yararları ve Avantajları

Aynı anda yürütüldüğünde, çoklu kullanım uygulamaların etkinliğini artırır. C# iş parçacığının en yaygın faydaları şunları içerir:

  • Geliştirilmiş uygulama performansı: Çoklu kullanım sayesinde, uygulamalar aynı alanda çalışan birden fazla görevle daha hızlı çalışır.Bütünüyle yürütme süresini azaltır ve yerini birden çok göreve bırakır.
  • Artan verim: C# dilinde çoklu görev, uygulamaların verimini artırır.İki farklı iş parçacığı aynı anda çalıştığında, zamandan ve kaynaklardan tasarruf sağlayabilir.
  • Geliştirilmiş yanıt hızı: Çoklu kullanım sayesinde, program arka planda çalışırken bir kullanıcı uygulamanın ön ucuna erişebilir.
  • Artan kaynak kullanımı: Çoklu kullanım, kullanıcıların sistem kaynaklarına daha verimli bir şekilde erişmesine olanak tanır.Örneğin, iş parçacıkları, verimliliğe giden yolu açarak dosyalar, bellek ve G/Ç cihazları gibi kaynakları paylaşabilir.
  • Daha erişilebilir programlama: Çoklu iş parçacığı, kullanıcılar bağımsız olarak dizi yazabildikleri için daha kolay programlama sağlar.Ayrıca, kullanıcıların uygulamalarda tek başına hata ayıklamasına ve test etmesine olanak tanır.
  • Optimize edilmiş iletişim: İş parçacığı senkronizasyonu, işlemden işlemeye daha iyi iletişim sağlar.İş parçacıkları arasında daha erişilebilir iletişim için kullanılabilir.

Birincisi, senkronize edilebilen tek nesneleri etkiler. İkinci olarak, System.Threading ve Interlocked sınıfı ile kullanılabilir.

C#'ta Multithreading'in Temel Kavramları

Çoklu iş parçacığı, kullanıcıların birden çok işlemci çekirdeğinin yardımıyla aynı anda birden çok görevi gerçekleştirmesini sağlar. Multithreading'de kullanılan temel kavramlar şunlardır:

  • Konular: Konular, çoklu kullanımda bir işlemin yürütülmesine yardımcı olan temel birimlerdir.Bunlar, diğer iş parçacıklarıyla birlikte eşzamanlı olarak çalışabilen belirli bir program içindeki yürütme yollarıdır.

C#'ta ön plan ve arka plan iş parçacıkları olmak üzere iki tür iş parçacığı bulabiliriz. Ortalama iş parçacığı sınıfı bir ad, öncelik, isAlive, ThreadState, Start(), Suspend(), Resume() ve Join() içerir.

  • İş parçacığı havuzu: Bir iş parçacığı havuzu, görevlerin yürütülmesine yardımcı olan bir iş parçacığıdır.İşletim sisteminin mevcut iş parçacıklarını yeniden kullanmasına izin verir ve olası ek yük riskini en aza indirir.
  • Senkronizasyon: Senkronizasyon, çoklu işlemler için diğer iş parçacıklarına erişimi göz ardı etmektir.Veri bütünlüğünü korumak ve genel giderleri önlemek için gerekli bir süreçtir.
  • Kilitlenme: Kilitlenme, iki iş parçacığı kaynakları paylaştığında ve başarılı olamadan ilerlemeye çalıştığında oluşan bir hatadır.Sistemin donmasına hatta bekleme süresine neden olabilir.
  • Eşzamansız programlama: Eşzamansız programlama, ana iş parçacığının kesintisiz çalışmasına izin verirken arka planda birden çok görevin çalıştırılmasına olanak tanır.Uygulama performansını iyileştirerek birden fazla yanıt veren kullanıcı arayüzünün yolunu açar.

Konu Oluşturma ve Çalıştırma

Oluşturmak ve çalıştırmak bu örneklerle daha kolay olabilir. Bir C# çoklu iş parçacığı örneği aşağıda verilmiştir:

Sistemi kullanarak;

System.Threading kullanarak;

sınıf Programı {

statik boşluk Ana() {

int işçiIndex = 0;

Konu çalışanıThread = yeni Konu(yeni KonuBaşlangıcı(İşçi));

işçiThread.Start();

for (int mainIndex = 1; mainIndex <= 10; mainIndex++) {

Console.WriteLine("Ana ileti dizisi: {0}", mainIndex);

Thread.Sleep(200);

}

işçiThread.Join();

}

statik geçersiz İşçi () {

for (int işçiIndex = 1; işçiIndex <= 10; işçiIndex++) {

Console.WriteLine(“Çalışan iş parçacığı: {0}”, işçiIndex * 2);

Thread.Sleep(200);

}

}

}

Çıktı:

Ana konu: 1

Çalışan iş parçacığı: 2

Ana konu: 2

Çalışan iş parçacığı: 4

Ana konu: 3

Çalışan iş parçacığı: 6

Ana konu: 4

Çalışan iş parçacığı: 8

Ana konu: 5

Çalışan iş parçacığı: 10

Ana konu: 6

Çalışan iş parçacığı: 12

Ana konu: 7

Çalışan iş parçacığı: 14

Ana konu: 8

Çalışan iş parçacığı: 16

Ana konu: 9

Çalışan iş parçacığı: 18

Ana konu: 10

Çalışan iş parçacığı: 20

Açıklama: Bu çıktıda, her iki iş parçacığı aynı anda çalışarak 1'den 10'a ve 2'den 20'ye kadar sayıları yazdırır, ikincisi döngü dizininden iki katına çıkar.Bu örnekte, C# iş parçacığı uyku (Thread.Sleep) yöntemi kullanılmıştır.

Aynı şekilde, ön plan iş parçacığını kullanarak başka bir C# iş parçacığı örneğine bakacağız :

Sistemi kullanarak;

System.Threading kullanarak;

sınıf Programı {

statik boşluk Ana() {

Konu myThread = yeni Konu(İşçi);

myThread.Start();

Console.WriteLine(“Ana Konu: Başladı”);

için (int ben = 1; ben <= 5; i++) {

Console.WriteLine(“Ana Konu: Sayı {0}”, i);

Konu.Uyku(500);

}

Console.WriteLine(“Ana Konu: Bitti”);

}

statik geçersiz İşçi () {

için (j = 1; j <= 5; j++) {

Console.WriteLine("İşçi Dizisi: Sayısı {0}", j * 3);

Konu.Uyku(750);

}

Console.WriteLine(“İşçi Dizisi: Bitti”);

}

}

Çıktı:

Ana Konu: Başladı

İşçi Konusu: Sayı 3

Ana Konu: Sayı 1

İşçi Konusu: Sayı 6

Ana Konu: 2 Sayısı

İşçi Konusu: 9 Sayı

Ana Konu: 3 Sayı

İşçi Konusu: Sayı 12

Ana Konu: 4 Sayısı

İşçi Konusu: 15 Sayı

Ana Konu: 5 Sayısı

Çalışan Konusu: Sona Erdi

Ana Konu: Bitti

Açıklama: Bu çıktı, iki iş parçacığının aynı anda nasıl çalıştığını gösterir.Ana iş parçacığı ve arka plan iş parçacığı paralel çalıştığı için ana iş parçacığı 1'den 5'e kadar sayıları yazdırır. Çalışan iş parçacığı 3'ten 15'e kadar olan sayıları yazdırır.

Becerilerinizi geliştirmek için upGrad'daki Yazılım Geliştirme Kurslarına göz atın.

Yazılım Geliştirme ile ilgili Popüler Makalelerimizi okuyun

Neden Kodlamayı Öğrenelim? Kodlamayı Nasıl Öğrenirsiniz? NPM Paketinin Spesifik Versiyonu Nasıl Kurulur? C++'da Kalıtım Türleri Ne Bilmelisiniz?

Konu Senkronizasyonu

İş parçacığı senkronizasyonu, bir programdaki birden çok iş parçacığının toplu koordinasyonunu içerir. Programın, paylaşılan kaynaklara erişim sağlayan belirli bir sırada yürütülmesini sağlar.

C#'ta, kilit anahtar sözcüğü, eşitleme nesneleri ve Interlocked sınıfı gibi eşitleme ilkelleri kullanılarak yapılır.

Bir C# iş parçacığı eşitleme örneği aşağıda verilmiştir:

Sistemin Kullanılması;

System.Threading'i Kullanma;

sınıf Tablo Yazıcısı

{

genel geçersiz PrintTable()

{

kilitlemek (bu)

{

için (int i = 3; i <= 8; i++)

{

Thread.Sleep(200);

Console.WriteLine(i*5);

}

}

}

}

sınıf Programı

{

genel statik geçersiz Main(string[] args)

{

TablePrinter tp = yeni TablePrinter();

Konu t1 = yeni Konu(yeni ThreadStart(tp.PrintTable));

Konu t2 = yeni Konu(yeni ThreadStart(tp.PrintTable));

t1.Başlat();

t2.Başlat();

}

}

Çıktı:

15

20

25

30

35

40

45

50

55

60

Ücretsiz Yazılım Geliştirme Kurslarımızı Keşfedin

Bulut Bilişimin Temelleri Sıfırdan JavaScript Temelleri Veri Yapıları ve Algoritmalar
Blockchain Teknolojisi Yeni Başlayanlar İçin Tepki Çekirdek Java Temelleri
java Yeni Başlayanlar İçin Node.js Gelişmiş JavaScript

Kilitlenmeler

Çoklu kullanımdaki kilitlenmeler, en az iki veya daha fazla iki iş parçacığı bir dizi kaynağa bağlı olduğunda gerçekleşir. Bir iş parçacığı yardıma giden yol ile örtüştüğünde, diğeri aynı şeyi yapmaya çalıştığında, bu bir kilitlenme haline gelir.

Örneğin, İş Parçacığı A'nın Kaynak 1'de kilidi varsa ve Kaynak 2'ye erişmeyi beklerken B İş Parçacığı Kaynak 1'i bekliyorsa, bu kilitlenmeye neden olabilir.

Aşağıda bir örnek verilmiştir:

Sistemi kullanarak;

System.Threading kullanarak;

ad alanı kilitlenmesi incsharp

{

genel sınıf Örneği

{

statik salt okunur nesne firstLock = yeni nesne();

statik salt okunur nesne secondLock = yeni nesne();

statik geçersiz ThreadJob()

{

Console.WriteLine(“\t\t\t\tİlk Kilit Kilitleniyor”);

kilit (ilk Kilit)

{

Console.WriteLine(“\t\t\t\tLocked firstLock”);

Thread.Sleep(1500);

Console.WriteLine(“\t\t\t\tİkinci Kilit Kilitleniyor”);

kilit (ikinci Kilit)

{

Console.WriteLine(“\t\t\t\tKilitli ikinci Kilit”);

}

Console.WriteLine(“\t\t\t\tSecondLock serbest bırakıldı”);

}

Console.WriteLine(“\t\t\t\tİlk Kilit Açıldı”);

}

statik boşluk Ana()

{

yeni Konu(yeni ThreadStart(ThreadJob)).Start();

Thread.Sleep(1000);

Console.WriteLine("ikinci Kilit Kilitleniyor");

kilit (ikinci Kilit)

{

Console.WriteLine("Kilitli ikinci Kilit");

Console.WriteLine(“ilk Kilit Kilitleniyor”);

kilit (ilk Kilit)

{

Console.WriteLine(“İlk Kilit Kilitlendi”);

}

Console.WriteLine(“ilk Kilit Serbest Bırakıldı”);

}

Console.WriteLine(“ikinci Kilit serbest bırakıldı”);

Konsol.Oku();

}

}

}

Çıktı:

ikinci Kilidi kilitleme

İkinci kilit kilitli

İlk Kilitleme

Önce kilitlendiKilit

İlk kilit yayınlandı

SecondLock yayınlandı

İsteğe Bağlı Yazılım Geliştirme Becerileri

JavaScript Kursları Temel Java Kursları Veri Yapıları Kursları
Node.js Kursları SQL Kursları Tam yığın geliştirme Kursları
NFT Kursları DevOps Kursları Büyük Veri Kursları
React.js Kursları Siber Güvenlik Kursları Bulut Bilişim Kursları
Veritabanı Tasarım Kursları Python Kursları Kripto Para Kursları

Konu Havuzları

İş parçacığı havuzları, C# dilinde çok iş parçacıklı bir ortamda birden çok yürütme iş parçacığının yönetilmesine yardımcı olur. Bunlar, tüm iş parçacıklarının kilitlenmelere yol açmadan kontrollü kaynaklara erişmesini sağlar.

Bir iş parçacığı havuzu yöneticisi, iş parçacıklarını oluşturmaktan, yok etmekten ve programlamaktan sorumlu olduğu iş parçacığı havuzuna bakar.

İşte TPL (Görev Paralel Kitaplığı) kullanan bir iş parçacığı havuzu örneği:

Sistemi kullanarak;

System.Threading.Tasks kullanarak;

sınıf Programı

{

statik boşluk Ana()

{

görev<dize> görev = Task.Factory.StartNew<dize>

(() => DownloadString(“http://www.example.com/”));

dizi sonucu = görev.Sonuç;

Console.WriteLine(sonuç);

Konsol.Oku();

}

statik dizi DownloadString(dize uri)

{

(var wc = new System.Net.WebClient()) kullanarak

wc.DownloadString(uri);

}

Çıktı:

Çıktı, web sayfasında bulunan içeriğe bağlıdır. Bu program, web sayfasındaki içeriğin belirtilen URL'den indirilmesini sağlayacaktır. Daha sonra bunları yazdıracaktır.

Görev Paralel Kitaplığı (TPL) ile Eşzamansız Programlama

Görev Paralel Kitaplığı (TPL), APIS ve genel türlerle başa çıkmak için güçlü bir araçtır. System.Threading ve System.Threading.Tasks öğelerini işler .

.NET Framework 4, paralel kod yazmayı hedefleyen geliştiriciler için dil ve çerçeve düzeyinde API'ler sunar. TPL'nin yardımıyla, eşzamansız programlama, programların ana iş parçacığını engellemeden çalışmasına izin verir.

İşte TPL ile eşzamansız programlamaya bir örnek:

görev<dize> görev = Task.Factory.StartNew<dize>(() => {

"sonuç" döndür;

});

dizi sonucu = görev.Sonuç;

zaman uyumsuz Görev MyMethod() {

dizi sonucu = görev bekleniyor;

}

Rekabette avantaj elde etmek içinücretsiz teknoloji kurslarımızagöz atın.

C#'ta Çoklu Kullanım için En İyi Uygulamalar

Çoklu kullanım, performans ve çoklu görev açısından zaman kazandırabilir. Çoklu iş parçacığının nasıl çalıştığı hakkında daha fazla bilgi edinmek için, LJMU'dan Bilgisayar Bilimleri Yüksek Lisansını seçebilirsiniz .

Kullanıcıların zamandan tasarruf etmesine ve en yüksek verimliliği kaydetmesine yardımcı olacak birkaç en iyi uygulama burada verilmiştir.

  • İş parçacığı açısından güvenli koleksiyonlardan yararlanın: .NET Framework'ün eşzamanlı koleksiyonları, her koleksiyonun iş parçacığı açısından güvenli bir sürümünü sağlar ve bu da çoklu iş parçacığının verimli çalışmasını kolaylaştırır.Bu koleksiyonlar, listeleri, sorguları ve sözlükleri içerir.
  • İş parçacığı senkronizasyonunu uygulayın: Kullanıcılar, iş parçacığı araçlarının doğası gereği kilitleri, monitörleri ve semaforları hızla uygulayabilir.
  • İş parçacığı havuzunu kullanın: İş parçacığı havuzu oluşturmanın büyük çoğunluğu kullanıcılar tarafından yapıldığından, çoklu iş parçacığı sistemler için daha kolay ve verimli olabilir.Aynı zamanda, kullanıcılar bunu otomatik olarak ileti dizileri oluşturmak için kullanabilirler.
  • İş parçacığı yerel depolama kullanın: Çoklu iş parçacığı uygularken, iş parçacığı yerel depolamayı optimize ederek ve birden çok iş parçacığına erişim sunarak belirli bir kaynağa erişim sağlayın.
  • Değişken durumları paylaşmaktan kaçının: Paylaşılan değişken durumlar, yalnızca yanıltıcı olabilecek hatalara ve yarış koşullarına yol açacaktır.Ne pahasına olursa olsun değişken durumlardan kaçındığınızdan emin olun.
  • Eşzamansız model kullanın: Eşzamansız yöntemler, birden çok görevi yeniden başlatmadan veya sırada bırakmadan paralel olarak uygulamanıza yardımcı olur.
  • Kilitlenmelerden kaçının: Çoklu iş parçacığı kullanan programlar yürütülürken kilitlenmeler beklenebilir.Bir program yazarken, kilitlenmelerden kaçınarak bir iş parçacığını yalnızca birbiri ardına çalıştırmayı deneyin.
  • İptal belirteçlerini kullanın: İptal belirteçleri, iş parçacıklarının sorunsuz bir şekilde sonlandırılmasına olanak tanır ve kilitlenmeyi önler.

Popüler Yazılım Mühendisliği Kurslarımızı keşfedin

LJMU & IIITB'den Bilgisayar Bilimlerinde Bilim Ustası Caltech CTME Siber Güvenlik Sertifika Programı
Tam Yığın Geliştirme Eğitim Kampı Blockchain'de PG Programı
Tam Yığın Geliştirmede Yönetici PG Programı
Aşağıda Tüm Kurslarımızı Görüntüleyin
Yazılım Mühendisliği Kursları

Çözüm

C# dilinde çoklu iş parçacığı, iş yerindeki yüksek verimli modeliyle temel bir kavram olmaya devam ediyor. Programcılara, bir programın iş yükünü aynı anda ve bağımsız olarak çalışan birden çok göreve bölmek için esnek bir yol sağlar.

Multithreading son derece faydalı olabilse de, dikkatli bir şekilde uygulanmadığı takdirde olası engellere yol açabilir.

Girişimci yazılımlar için 2009-2023 yılları arasında 856 milyar doları aşan küresel bütçe ile yazılım geliştirme, geliştiriciler için parlak bir kariyer vaat ediyor.

upGrad'dan Full Stack Software Development Bootcamp'a şimdi başvurun ! Tam bir yığın geliştirme kursu, bilgisayar bilimindeki potansiyellerini ortaya çıkarmak isteyen geliştiriciler için bir basamak olabilir.

1. Çok iş parçacıklı programlama nedir?

Çok iş parçacıklı programlama, aynı anda birden çok iş parçacığı kullanan programların yürütülmesini içeren bir süreçtir. Ön uçtaki kullanıcıların bilgisayarda çalışan programın birden fazla kopyasını kesintisiz olarak kullanmalarını sağlar.

2. İş parçacığı ve işlem arasındaki birincil fark nedir?

Bir işlem tipik olarak yürütme durumundaki bir programı içerirken, bir iş parçacığı bir alt işlem içindeki bir işlemden oluşur.

3. C#'ta iş parçacığı ile görev arasındaki fark nedir?

C#'daki bir iş parçacığı, programlama amaçlı bir iş parçacığı havuzu oluşturmak ve yönetmekle ilgilenir. Öte yandan, bir görev, arka planda çalışan eşzamansız bir işlevi temsil eder.