C#nedir?com
 
YAZAR HAKKINDA
Ahmet Faruk Nacaroğlu
Ahmet Faruk Nacaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
40 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Ahmet Faruk Nacaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 1.11.2003
Okunma Sayısı : 25240
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 12.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 12.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 12.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 12.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# ile .NET Ortamında Threading'e Giriş
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
İnsan vücudunda aynı anda bir çok iş birlikte yapılır, mesela kalbimiz tüm vücuda kan pompalarken midemiz yediğimiz bir şeyi sindirmek için gerekli enzimleri salgılar: Bilgisayarların zaman içinde çok hızlı gelişmeleri sonucunda insanlar bu aletlerden daha fazla verim ve hız beklediler ve ortaya atılan birçok çözümden biri de iş parçacıklarını (threads) kullanmak olmuştur. İş parçacıkları ilk defa Ada programlama dilinde Amerikan ordusunun stratejik yazılımları için kullanılmıştır. Daha sonra C++ dilinde iş parçacıklarını kullanmak için kütüphaneler geliştirilmiştir. Bu kütüphaneler sayesinde zaman içinde C++ dilinde yazılmış programlarda iş parçacıklarını kullanmak bir takım faydalar sağlamıştır.

İş parçacıklarını .NET ortamında nasıl kullanacağımızı öğrenmeden önce işin teorik temellerini bilmek gerekir. Ayrıca iş parçacıklarını ne zaman ve nasıl programlarımıza katmayı da öğrenmek daha sağlıklı programlar geliştirmeye yardımcı olacaktır. Makalemizin kalan kısmını MSDN kütüphanesindeki iş parçacıkları konusunun baş kısımları oluşturacaktır.

İşletim sistemlerinde aynı anda birden fazla programın çalışması günümüzde mümkün hale gelmiştir. Aslında bir işlemcide aynı anda sadece bir işlem gerçekleşebilir. Fakat başlayan bir işlemin tamamını bitirmeden başka bir işlemin yapılması ile multitasking başarılabalir. Mesela bir taraftan Ms Word diğer taraftan Ms Explorer açık olabilir. İşlemlerin bir alt parçası olan iş parçaçıkları (threadler) aynı zamanda bilgisayar ortamında yapılacak olan en küçük görev birimleridir denilebilir. Bir işlem(process) içinde birden fazla iş parçacığı bulunabilir. Her bir iş parçacığı için hata yönetimi(expection handler), öncelik çizelgesi (scheduling priority) ve bir takım yapılar bulunur. Bir önceki cümlede bahsettiğimiz yapılar iş parçacığı hakkında işletim sisteminin tuttuğu bilgilerdir. Bu bilgiler ile iş parçacıklarının sorunsuz olarak çalıştırılması sağlanır.

.NET platformu işlemleri(process) daha küçük bir birim olan application domain'lere ayırır. Application domain'ler System.AppDomain sistem alanındaki sınıflar tarafından işlenirler. .NET'te bir veya daha fazla iş parçacığı birden farklı application domain için çalışabilir. Her ne kadar bir application domain sadece bir tane iş parçacığı ile çalışmaya başlasa da zaman içinde birden fazla application domain ve iş parçacığı aynı application domain için çalışabilir. Ayrıca tek bir iş parçacığı birden farklı application domain'ler arasında gidip gelebilir.

Eğer bir işletim sistemi preemtive multitasking'i destekliyorsa bilgisayarda birden fazla programın aynı anda çalışıyormuş hissi yaratılabilir. Bunun için işletim sistemi her bir işlemin belirli bir süre (time slicing) işlemciyi meşgul etme hakkı tanır. İşlemci kullanım süresi dolan işlem bekletilmeye alınır ve bu işlem hakkındaki bilgiler bir yere not edilir. Sonra sırada bekleyen (thread queue) başka bir işlemin belirli bir süre işlemciyi kullanmasına izin verilir. İkinci işlemin de süresi dolunca bu işlem hakkında bilgiler bir yere kaydedilir ve tekrar kuyruğa geri döner. Sonra sıradaki diğer işleme başlanır... Ve bu şekilde devam eder.

İşlemlerin işlemciyi kullanma aralıkları işletim sistemine ve işlemciye göre değişir. İşlemciyi kullanma aralıkları o kadar küçük ve işlemciler o kadar hızlıdır ki bir çok iş parçacığının çalıştırıldığı bir işletim sisteminde aynı anda birden farzla programın çalıştığı hissi kullanıcıda uyanır.

Ne Zaman Birden Fazla İş Parçacığı ile Çalışmalı?

Eğer geliştirdiğimiz programlar kullanıcı ile sık sık etkileşime geçiyor ve kullanıcılara sistemin cevabının çok hızlı olması gerekiyorsa iş parçacıklarını kullanmak yerinde olacaktır. Eğer sizin programınızda sadece bir iş parçacığı yeterli oluyorsa ve .NET remoting veye XML Web servisleri kullanıyorsanız yine iş parçacıklarından faydalanmak suretiyle programınızın kullanıcıya vereceği tepkiyi daha kısa sürede üretebilirsiniz. Son olarak yoğun bir biçimde I/O işlemleri gerektiren programlarda iş parçacıklarından faydalanmak uygun olacaktır.

Çoklu İş Parçacıklarının Avantajları
Birden fazla iş parçacığı kullanmakla hem programın kullanıcıya olan cevap süresi (Kullanıcı arayüzünde) kısalır hem de aynı anda arka planda verilerin hızlıca işlenip sonuca ulaşılması sağlanır. Mesela biz bir taraftan Excel çalışma sayfasına verileri giriyorken diğer taraftan Excel çalışma sayfasında tanımlanan formüllere göre diğer hücrelerin değerlerini hesaplayıp yazar.

Bir programda hem iş parçacıkları kullanılır hem de bu program birden fazla işlemcisi olan bir makinada çalıştırılırsa kullanıcıların programdan memnuniyetlerinde çok ileri seviyede artışlar olur. Geliştirdiğimiz bir programda birden fazla iş parçası kullanmakla:

  • Ağ üzerinde, web sunucu ile yada veritabanı ile veri alışverişi

  • Çok uzun süren hesaplamalı işlemleri

  • Farklı öncelikteki görevlerde. (Mesela yüksek öncelikli iş parçacıkları ile hemen bitirilmesi gereken işlemler yapılırken diğer iş paraçıkları başka işleri yapabilir.)

  • Grafik arayüzünde kullanıcıya daha hızlı cevap verilirken arka planda diğer veri işleme işleri gerçekleşir.
Çoklu İş Parçacıklarının Dezavantajları
Mümkün olduğunca az sayıda iş parçacığını aynı anda kullanmak tavsiye edilir. Bu şekilde işletim sisteminin daha az kaynağını kullanır ve performansı artırabiliriz. Ayrıca iş parçacıkları için hem ek kaynak gereksimi hem de programda çakışma ihtimalleri vardır. İş parçacıkları için gerekli ek kaynaklar şunlardır:

  • İşletim sistemleri işlemler, AppDomain nesneleri ve iş parçacıkları hakkında bilgileri tutmak zordundadırlar. Yani, işlemler, AppDomain nesneleri ve iş parçıklarının oluşturulmasında kullanılabilir hafıza sınırlayıcı bir etken olabilir.

  • Çok sayıda iş parçacıkları ile çalışma durumlarında, işlemci iş parçacıklarının gerektirdiği işleri yapmaktan çok iş parçacıkları arasında geçiş için meşgul olur. Ayrıca bir işlemin içinde çok sayıda iş parçacığı varsa bu iş parçacıklarının işlenmesi için daha az sayıda şans doğacaktır.

  • Birden fazla iş parçacığı aynı anda işlemye çalışmak çok karmaşık bir durum yaratır ve bir çok hataya sebep olabilir.

  • Bir iş parçağınının işi bittiğinde onu yok etmek için yine çok karmaşık kodlar yazmak ve sonuçlarını tahmin etmek gerekir.

Kaynakları paylaşmak ve birden fazla işlem için aynı anda kullanmaya çalışmak sistemde çakışmalara yol açabilir. Muhtemel çakışmaların önüne geçmek için senkronizasyon yapmak veya paylaşılan kaynaklara erişimi kontrol altına almak gerekir. Aynı veya farklı AppDomain'lerde erişimleri senkronize etmede başarısızlık durumumda deadlock (aynı anda iki iş parçacığının boş durdukları halde birbirlerini sonsuza kadar beklemleri) problemi ortaya çıkabilir. Fakat sistemin sağladığı senkronize nesneleri ile aynı kaynağın farklı farklı iş parçacıkları tarafından kullanılması koordine edilebilir. Tabiki iş parçacıklarının sayısını azaltmak da kaynakların senkronize olarak kullanılmasını kolaylaştırır.

Senkronize edilmesi gereken kaynaklar şunlardır:

  • Sistem kaynakları (iletişim portları gibi)

  • Birden fazla işlem tarafından kullanılan kaynaklar.(dosya yöneticileri)

  • Tek bir AppDomain'e ait (global, satic ve örnek veri alanları) fakat farklı iş parçacıkları tarafından kullanılan kaynaklar.


İş Parçacıkları ve Uygulama Tasarımı
Genelde kısa sürecek görevler ve özel olarak zamanlama gerektirmeyen iş parçacıkları için ThreadPool sınıfını kullanmak en kolay yoldur. Fakat bir çok sebebten dolayı kendimize ait thread sınıfını yazmak daha iyi olacaktır. Bunun en önemli nedenleri şunlardır:

  • Eğer özel önceliğe sahip bir görev tanımlayacak ve kullanacaksak.

  • Eğer uzun sürebilecek bir iş yapmak gerekiyorsa.

  • Eğer iş parçacıklarınızı tek-iş parçacığı aparmanına koymak gerekiyorsa (ThreadPool sınıfındaki tüm iş parçacıkları çoklu-işparçacığı apartmanına koyulur.)

  • Eğer bir iş parçacığı için sabit bir kimlik kullanmak gerekiyorsa .

İleriki yazılarda .NET ortamında C# ile iş parçacıklarının kullanımlarını daha detaylı olarak inceleyeceğiz ve bir çok örnek kod üzerinde duracağız.

Makale:
C# ile .NET Ortamında Threading'e Giriş C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor