Multithreading & Asynchronous Programlama

Benzer belgeler
İş Parçacıkları Thread(s)

İşletim Sistemlerine Giriş

İşletim Sistemleri (Operating Systems)

YZM 3102 İşletim Sistemleri

Bölüm 7: Kilitlenme (Deadlocks)

Görsel Programlama DERS 11. Görsel Programlama - Ders11/ 1

PROCESS YARATIMI (TEKRAR):

İş Parçacıkları (Threads)

İşletim Sistemleri (Operating Systems)

Bilgisayar İşletim Sistemleri BLG 312

Montoya

Multicore/Multithread Programlama

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

İŞLETİM SİSTEMLERİNE GİRİŞ - 2. Sistem, sistem kaynaklarını belli bir hiyerarşi içinde kullanıcının hizmetine

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

REALTIME LINUX. 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir.

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir

& WIN 32 DEN BAKIŞ AÇISI İSMAİL YALÇIN

İşletim Sistemlerine Giriş 2. Kaynakların Paylaşımı. Öğr.Gör. Dr. Şirin KARADENİZ

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Bilgisayar İşletim Sistemleri BLG 312

İşletim Sistemlerine Giriş

LINQ (Temel Kavramlar)

NESNEYE YÖNELİK TASARIM SÜRECİ

İŞLETİM SİSTEMLERİ. (Operating Systems)

İşletim Sistemlerine Giriş

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.

İşletim Sistemlerine Giriş

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

YZM 3102 İşletim Sistemleri

BM-311 Bilgisayar Mimarisi

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

İŞLETİM SİSTEMLERİ DÖNEMİÇİ SINAVI

İşletim Sistemlerine Giriş

«BM364» Veritabanı Uygulamaları

HSancak Nesne Tabanlı Programlama I Ders Notları

BM-311 Bilgisayar Mimarisi

PARALEL HESAPLAMA ÇAĞRI GİDER ENES BİLGİN

State Yönetimi. Bir web sayfası ile sunucu arasındaki etkileşim ;

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

İŞ SIRALAMA. İş Sıralamanın Amaçları. İş Sıralama Türleri - 1. İş Sıralama. İş Sıralama Türleri - 2

Proses. Prosesler 2. İşletim Sistemleri

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır.

İşletim Sistemleri-II

İŞ SIRALAMA. İş Sıralama 6. İşletim Sistemleri

Programlama Dillerinde Kullanılan Veri Tipleri

İşletim Sistemleri. B L M Mesleki Te r minoloji I I Ö ğ r e n c i S unumu

Bölüm 6: İşlem Senkronizasyonu (1) Operating System Concepts with Java 8 th Edition

İşletim Sistemlerine Genel Bakış

PROSESLER. Proses. Proses

BİL-142 Bilgisayar Programlama II

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

Bölüm 8: Ana Bellek 8.1

C# nedir,.net Framework nedir?

Problem - Unix / Windows PROCESS-Süreçleri "ağır" dır. Hafta 07: Threads (İş Parçacıkları) Örnek - 1. Proses=Bir iş parçacığı (single thread)

Sanal Makineler ve Linux Konteynerlerin Performans Karşılaştırması

Bölüm 4: Threads (İş Parçaları)

Bölüm 8: Ana Bellek. Operating System Concepts with Java 8 th Edition

ÇOK ÇEKİRDEKLİ İŞLEMCİLER VE PARALEL YAZILIM GELİŞTİRME OLANAKLARI HAKKINDA BİR İNCELEME

Üst Düzey Programlama

OYUN GELİŞTİRME AŞAMALARI (ARAYÜZ TASARIMI)

BM-311 Bilgisayar Mimarisi

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

F.Ü. Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuvarı DENEY NO: 6 JAVA İLE DAĞITIK PROGRAMLAMA.

İşletim Sistemlerine Giriş

Bölüm 3: İşlemler Operating System Concepts with Java 8th Edition 3.1 Silberschatz, Galvin and Gagne 2009

Bölüm 3: İşlemler Operating System Concepts with Java 8th Edition 3.1 Silberschatz, Galvin and Gagne 2009

Veritabanı. Ders 2 VERİTABANI

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

Göstericiler (Pointers)

Bölüm 7: Kilitlenmeler. Operating System Concepts with Java 8 th Edition

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

1.1. Yazılım Geliştirme Süreci

BM-311 Bilgisayar Mimarisi

DERS 10 İŞLETİM SİSTEMİ ÇALIŞMA PRENSİBLERİ VE HATA MESAJLARI

Bilgisayarların Gelişimi

Bölüm 13: Giriş-Çıkış (I/O) Sistemleri

Windows Eski Sürümleri Bellek Yapısı

İŞLETİM SİSTEMLERİ DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

4. Bölüm Programlamaya Giriş

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

Dağıtık Sistemler CS5001

1. GİRİŞ Kılavuzun amacı. Bu bölümde;

Çekirdek Nedir? Ne yapar?

Yrd.Doç.Dr. Celal Murat KANDEMİR

Bilgisayar Sistemlerine Genel Bakış

Bölüm 10. Eşzamanlılık (Concurrency) ISBN

İşlem Yönetimi (Process Management)

HSancak Nesne Tabanlı Programlama I Ders Notları

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Algoritma ve Akış Diyagramları

Normatif Çoklu Etmen Sistemlerinde Rol Tabanlı Etmenler İçin Politika Bazlı Bir Erişim Denetimi

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

Ölümcül Kilitlenme. Ölümcül Kilitlenme Örneği - 1

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

Transkript:

Multithreading & Asynchronous Programlama

Concurent : Aynı zamanda olan olayları tanımlamak için kullanılır. Multithreaded : Çoklu yürütme içeriklerini tanımlar. Parallel : Aynı anda gerçekleşen işlemler paralel işlemler olrak isimlendirilir. Asynchronous : Bekleme gerektirmeyen işlemlerde kullanılır.

Multithreading

Process in Yapısı Process bir tür depodur. Kendi sanal adres uzayı (virtual address space) vardır. Bir process in içeriği diğer bir process tarafından adreslenmez. Kod kütüphaneleri bu adres uzayına haritalanırlar.

Process ve Thread Thread ler kodu icra ederler (execution). Thread, bir process deki tüm kod boyunca var olan icra yoludur. Bir process deki tüm dataya veya hiçbirine erişebilir. Her bir thread in kendi callstack ı ve CPU registerlerinin kopyası vardır. Thead i olmayan process çalışmasını bitirir.

Çoklu Threadlerin Kullanım Alanları CPU ya bağlı işlemlerin paralelleştirilmesine olanak verir. (multi-core / multi-processor desteği ile) I/O işlemleri nedeniyle bekleme yaşanırken CPU ya bağlı işlemlerin gerçekleşmesini sağlar. UI nin kullanıcıya cevap verebilen (responsive) şekilde olmasına olanak sağlar.

Sanılanın aksine tek işlemci tek bir core a sahip olan makine üzerinde de çok thread li yapı kullanılabilir. Böyle bir durumda ise;

Çok thread li program yazımı aşağıdaki sonuçları doğurur. Program karmaşıklığını arttırır. Kod sayısı artar. Okunabilirlik ve yönetilebilirliğin önüne geçer. Debug yapmak zorlaşır. Test etmek zorlaşır.

Thread olarak çalıştırılacak olan metotların imzası aşağıdaki şekilde olmalıdır: void EntryPointMethod() void EntryPointMethod(object statearg)

Nesne üzerinden tanımlanmış olan metotlar da farklı bir thread şeklinde çalıştırılabilirler.

Thread lerin Yaşam Süreleri (Lifetime) Yürütme, thread in çalışmaya başladığı noktaya dönünceye kadar devam eder. Thread çalışmasını 3 tür şekilde sonlandırır. Görevini tamamlayıp çalışmaya başladığı noktaya geri döndüğünde, Çalışmasını sırasında thread in kendinden meydana gelecek bir exception meydana geldiğinde, Diğer herhangi bir thread in çalışmakta olan thread i Interrupt() ve Abort() metotlarını çağırmasıyla. IsAlive özelliği ile thrad in hangi evrede olduğu öğrenilebilir.

Sonlandırırken Koordinasyon

Thread Pool CLR her process için bir thread pool sağlar. Eş zamanlı işlemler için bu havuzdan threadleri ödünç alır. Gelen istekler doğrultusunda havuzdan threadler alınır veya iade edilir. Havuzdan alınan threadlerin IsBackground özellikleri true olarak belirtilir. Thread havuzu ile 3 farklı şekilde etkileşime girmek mümkündür. ThreadPool.QueueUserWorkItem Delegate.BeginInvoke Asynchronous I/O

ThreadPool.QueueUserWorkItem

Delegate Temsilciler thread havuzuna arayüzler sağlar. Hatırlanacağı gibi delegate ler fonksiyon göstericileridir. BeginInvoke metotdu ile delegate ile işaret edilmiş metot Thread havuzundan istekte bulunur.

Senkronizasyon (Synchronization)

Birçok kaynağa eş-zamanlı olarak (concurrently) erişmek mümkün değildir. Kaynaklar; Kolleksiyonlar(diziler, linked-list ler, vd.) Dosyalar Intgeter gibi temel veri türleri olabilir.

Böyle bir durumda, program ekrana hangi değeri basmalıdır? Gerçekte hangi değeri basmaktadır?

Yarış Durumu (Race Condition) HATA

Çözüm 1 Birçok işlemci kelime boyutunda atomik güncellemeleri desteklemektedir.

FCL, işlemciden bağımsız olarak atomik güncellemeleri gerçekleştirebilir. Bunun için System.Threading.Interlocked sınıfı içerisindeki metotlar kullanılır.

Çözüm 2 Bazen, veri seti bir çok thread in çalışmasına imkan verecek şekilde parçalara ayrılır (data partitioning). Bu tekniğin uygulanabilmesi için problemin bu tarz bir çözüme uygun olması gerekmektedir.

Çözüm 3 (Bekleme temelli zamanlama) (Wait-Based Synchronization) Bazen, threadler aynı kaynağa (parçalara ayrılamayan) erişime ihtiyaç duyarlar. Verideki bağımlılıklar (data dependency) veri setini parçalanmasını olanaksız kılar. Örn: Fibonacci işlemi islem[0] = islem[1]=1 islem[n] = islem[n-1]+ islem[n-2] Bu gibi durumlarda wait-based yaklaşımıyla senkronizasyon sağlanır. Thread izin verilinceye kadar bloklanmak durumunda kalınır.

Bu teknik programcı tarafından isteyerek gerçekleştirilir. Öncelikli olarak paylaşılan kaynak (shared resource) belirlenir. Senkronizasyonu sağlayacak araç belirlenir (Monitor, Mutex vb) Belirlenen bu aracın bir örneği (instance) kullanılarak bloklama işlemi gerçekleştirilir. Kaynağa erişmek isteyen bir thread; Kaynağın sahipliğini elde etmeli Ardından kaynağa ulaşmalı Sonrasında ise sahipliği bırakır.

CLR da pek çok wait-based senkronizasyon tekniği bulunmaktadır. Monitor Mutex ReaderWriterLockSlim ManualResetEvent, AutoResetEvent Semaphore System.Threading namespace inde bulunan sınıflar

System.Threading.Monitor CLR, belirli bir zamanda sadece tek bir threadin monitöre girmesine izin verir. Diğer threadler bloklanır. Thread kaynak ile işi bittiğinde monitor den çıkar.

Tut ve Bekle Hold & Wait Bazen bir thread bir kilidi tutarken beklemesi gerekebilir. Kaynağın yeniden beslenmesi vb. Diğer bir anahtar Bu gibi senaryolar Hold&Wait senaryosu olarak nitelendirilir.

Ölümcül Kilitlenmeler (DeadLocks) Hold-wait senaryosunun olduğu bütün durumlarda deadlock oluşabilir. Örn: bir thread bir kilide sahipken, diğer bir kilide de sahip olmak isteyebilir. Eğer iki veya daha fazla thread aynı kilit için yarışıyorlarsa deadlock oluşabilir. Sistemde çok fazla sayıda thread, işlemci veya core varsa deadlock oluşması muhtemeldir. Eğer kilitlerde zamanlama faktörü kullanılırsa deadlock geçici süreyle oluşur.

Mutex Mutex, Win32 kernel nesnesidir. System.Threading.Mutex, yönetilebilir kod için FCL wrapper sağlar. Zaman aşımı limitli kilit edinimlerini destekler. Aynı makine üzerinde processler arası thread senkronizasyonuna izin verir. Elde edilmesi ve salınması için kernel mode ile etkileşime geçmeyi gerektirir.

Zamanlamaya bağlı olaraktan bir kilit başka bir thread tarafından ele geçirilmiş olabilir. Böyle bir durum ise ölümcül kilitlenmeye neden olacaktır.

Asenkron Programlama ve Task Parallel Library (TPL)

Asynchronous Programlama Yükleme sembolünü ekranda göster Asenkron işlemi başlat Büyük boyutlu bir CSV dosyasını diskten oku Her bir satırı say Asenktron işlemi bitir Sonucu ekranda göster Yükleme sembolünü ekrandan kaldır.

Asynchronous ve Parallel Programlama Yükleme sembolünü ekranda göster Asenkron işlemi başlat Büyük boyutlu bir CSV dosyasını diskten oku Her bir satırı paralel bir şekilde say Asenktron işlemi bitir Sonucu ekranda göster Yükleme sembolünü ekrandan kaldır.

Amaç

Async & Parallel Programlama Her ikisi de Tasklara ve TPL kütüphanesini temel alır..net 4.0 dan itibaren desteklenmektedir. TPL in alternatifleri nelerdir? Threadler Asenkron delegate çağrıları (Async delegate invocation) Arka planda çalışan sınıflar QueueUserWorkItem TPL in avantajı nedir? Kolay exception yönetimi Kolay iptal edilebilme Daha az deadlock

Thread & Task İş parçacığı (thread), processin en küçük yürütme birimidir. Bir processin çok sayıda threadi olabilir. Diğer bir deyişle iş parçacığı (thread), bir process deki tüm kod boyunca var olan icra yoludur. Task, iş birimidir (unit of work). Sürmekte olan bir işleme veya hesaplamaya işaret eden bir nesnedir.

Task Oluşturmak(En Basit Yöntem)

Code-based task lar threadler tarafından icra edilirler. Thread task bitinceye kadar ilgili taskla ilişkilidir.

Task ın Sonlandırılması Task, code bloğu sonlandığında veya exception fırlatarak sonlanır.

Continuation

Task Oluşturmak(Yöntem 2)

TPL i kullanırken lambda ifadelerinden yararlanmak mümkündür.