Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
30231
Yorum Sayısı
:
0
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
22.11.2024
Turhal Temizer
Mac OS/X Removing CUDA
22.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
22.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
22.11.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
C# / VC#/.NET
/
C# ile .NET Ortamında Threading'e Giriş
C# ile .NET Ortamında Threading'e Giriş
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
İ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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl