Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Thread

Sunum
by

pelin karacan

on 26 December 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Thread

THREAD
THREAD İLE PARALEL HESAPLAMA
KULLANIMI
SENKRONIZASYON
THREAD KULLANMANIN RISKLERi
THREAD KULLANMANIN FAYDALARI
PROGRAM MODELLEMEDE KOLAYLIK
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. Ayrıca
yoğun bir biçimde I/O işlemleri gerektiren programlarda iş parçacıklarından faydalanmak uygun olacaktır.Programımızda thread kullanmak için öncelikle threading kütüphanesini programımıza eklemeliyiz.
Monitör ve Kritik Alan
Çoklu işlemci kullanımı
Threadin başlatılması, durdurulması, duraklatılması ve durduğu yerden devam etmesi gerekir çoğu zaman bu işlemler için gerekli fonksiyonlar şöyle;
1.Suspend();Bir işi “pause” ettiğimiz gibi durdurur.
2.Resume();Suspend metodu ile durdurulmuş işi kaldığı yerden devam ettirir.
3.Abort();Devam eden işlemi sonlandırır, bitirir. Abort ile sonlanmış işlem geri döndürülmez.
4.ThreadState;Bununla Threadin durumunu öğreniriz
5.IsAlive;Bununla threadin hala hayatta olup olmadığını öğreniriz.
6.Priority; Bununla threadimizin öncelik değerini öğrenir veya değiştirebiliriz.
7.Join : bir threadi sonlandırmak için programın içerisinde yaratılan başka bir threadin beklenmesi gerekebilir.Bu gibi durumlarda kullanılır.
8.sleep();Bu metodu kullanarak geçici olarak iş parçacıklarınız dondurabilirsiniz.Sleep aşamasında iş parçacığınız kesinlikle
CPU'yu meşgul etmemektedir.
İş parçalarına ayrılabilen programlar yapısal bir dille yazıldığında çok karışık ve verimsiz kodlama oluşur. Çok kanallı programlamada ise hem kodlamamız kolay hem program daha etkili olur.
TANIM:
Her nesnenin gözlemci (monitor) olarak isimlendirilen ve o nesne üzerinde hangi thread’in kontrol sahibi olacağını belirleyen bir kilit özelliği bulunur.Bu “kilit” (lock) aynı anda ancak bir thread tarafından açılabilir ve kilite erişim sıralı olarak gerçekleşir.
Senkronize (synchronized) metodlar kilite sahip olmayı gerektirir ve çalışma öncesinde kilit alınmış olmalıdır.Senkronize metodlar kritik alanı (critical section) belirler.Kritik alanlar birbirlerini dışlayıcı türdedir (mutually exclusive - mutex). Yani bir nesne için aynı anda ancak bir kritik alan çalıştırılabilir.
Senkronizasyon ve sorunları
Program sonucunun, thread’lerin işlemci süresi almasındaki farklılıklara göre değişmesi durumudur. Birden fazla thread’in aynı anda bir nesnenin durumu üzerinde değişiklik yapmaları sonucunda ortaya çıkar. Thread’ler değişkenin değerini değiştirmek için birbirleri ile “yarışırlar”.
**Deadlock:İki eylemin devam etmek için birbirinin bitmesini beklemesi ve sonuçta ikisinin de devam edememesi sorunu olarak ifade edilebilir.Bu durumda sözkonusu süreçler program sonlan(dırıl)ana kadar yanıt veremez duruma geleceklerdir.
Senkronizasyon yöntemleri
Aynı nesne üzerinde işlem yapmak isteyen Thread’lerin birbiri ile işbirliği yapabilmesine imkan tanır. Bir nesneye ait kilitin (lock) wait ve notify işlemleri aracılığı ile işbirliği içinde kullanılması esasına dayanır.
**Wait() çağrısından sonra Thread, sahip olduğu kilidi serbest bırakır ve başka bir thread tarafından yapılacak notify()/notifyAll() çağrısını bekler. İlgili çağrı ile tekrar çalışabilir (runnable – bkz.durumlar) duruma gelen thread, ancak ilgili nesnenin kilidine tekrar sahip olduğunda çalışmaya devam edebilir.
**Notify() metodu, bir nesne üzerinde beklemekte olan thread’lerden, belirsiz birisinin JVM tarafından çalışabilir (runnable) duruma getirilmesini sağlar. notifyAll() metodu, bir nesne üzerinde beklemekte olan tüm thread’lerin çalışabilir duruma getirilmesini sağlar.
Tek işlemci kullanıldığı durumlarda çok thread' li uygulama zaman dilimleme ile gerçekleştirilir;tek işlemci faklı thread' lar arasında çok hızlı geçiş yapar ve bu durumda işlemler gerçekte olmasa bile eş zamanlı koşuluyormuş izlenimi verir.
Çok işlemcili sistemlerde farklı thread' ler farklı işlemciler üzerinde eş zamanlı olarak çalışabilir.
Asenkron Mimari Nedir?
Süreçlerin bağımsız bir ekilde aynı anda devam
etmesi seklidir.
Bilgisayarlar aynı anda birden fazla işlem yapamaz,bu durumlarda asenkron mimari kullanılır.
*Çoklu işlemci kullanımı
*Devamlılık sorunları
*Performans sorunları
*Program modellemede kolaylık
*Asenkron işlemlere uyum
Performans sorunları
Normal bir uygulamada tek işlemci ile çalışan bir işlem başlatmış olursunuz.
Thread kullanılan programda ise bir işi birden fazla thread ile yapmak mümkündür.Bu yüzden performans artmış olur.
Thread kavramı, bir process’e bağlı daha doğrusu bir process tarafından oluşturulmuş o process’in adres uzayını(address space) ve kaynaklarını kullanabilen ama bununla birlikte kendisine ait bir yığın ve mesaj kuyruğuna(message queue) sahip kod parçasıdır. Bir process in çalışmaya başlaması ile birlikte bir thread oluşturulur(Ana thread ya da Main thread) ve bu process içerisinde programcının direktifleri ile birden fazla thread oluşturulabilir(İşçi thread ya da Worker thread).
Mümkün olduğunca az sayıda i parçacığını aynı anda kullanmak tavsiye edilir. Bu sekilde iletim sisteminin daha az kaynağını kullanır ve performansı artırabiliriz.
Parçacıklarının faydası olduğu kadar riski de çok. Hata ayıklama islemleri daha zor, yapılan bir hata fark edilemeyebiliyor.
Multithreading programlama yaparken programcıyı en fazla zorlayan
seylerin basında farklı threadler arasındaki veri alısverisi
gelmektedir.O yüzden thread ve kritik bölge kavramlarını iyi bilmemiz gereklidir.
Eğer threadler aynı anda aynı bölgeye girerse hatalar meydana
gelebilir.Örnek:deadthlock.Biz bu bölgeye kritik bölge diyoruz.
METHODLAR
using System.Threading;

Kodda gördüğünüz gibi ilk olarak yeni bir thread oluşturuyor ve bu threadin kullanacağı fonksiyonu da ThreadStart nesnesi içinde yazıyoruz. thread1.Start() dediğimiz zaman ThreadStart içine yazmış oluğumuz kodlar ilgili thread tarafından işlenmeye başlar.

System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;
Thread thread1 = new Thread(new ThreadStart(listBox1Ekle));
Thread thread2 = new Thread(new ThreadStart(listBox2Ekle));
Thread thread3 = new Thread(new ThreadStart(listBox3Ekle));

thread1.Start();
thread2.Start();
thread3.Start();
Şimdi örneklere
geçelim...
:)
Full transcript