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

Benzer belgeler
Multithreading & Asynchronous Programlama

Dağıtık Sistemler CS5001

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

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

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

BİL132 Bilgisayar Programlama II

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

BİL-141 Bilgisayar Programlama I (Java)

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

7. HAFTA. Erişim Belirleyiciler

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

// hataları işaret eden referans

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

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

HSancak Nesne Tabanlı Programlama I Ders Notları

C# Console Uygulamaları ifelse Yapıları 2

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Ders 8 Konu Özeti ve Problemler

Veritabanı İşlemleri

Lambda İfadeleri (Lambda Expressions)

YZM 3102 İşletim Sistemleri

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Erişim konusunda iki taraf vardır:

BMH-303 Nesneye Yönelik Programlama

İŞ PARÇACIKLARI (THREADS)

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

11- FONKSİYONLAR (FUNCTIONS)

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

BİL-141 Bilgisayar Programlama I (Java)

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

Programlama Dilleri 3

Sunum İçeriği. Programlamaya Giriş

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Akış Konrol Mekanizmaları

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)

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

İşletim Sistemlerine Giriş

Yazılım Kodlama ve İ simlendirme Standartları v1.0

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Programlama Dilleri 3

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

PROCESS YARATIMI (TEKRAR):

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

C# Çalışma Örnekleri

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Java Class Yapısında Finalize Metotunun Kullanımı

PORT HABERLEŞME SERİ PORT FARUK BOZAN

Java String İşlemleri

Ders - 7 while döngüsü

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

Şablon Türler (Generics)

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

Programlama Dillerinde Kullanılan Veri Tipleri

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

/*int sayi1, sayi2,toplam=0;

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

YZM 2105 Nesneye Yönelik Programlama

Multicore/Multithread Programlama

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

OPERATÖRLER Alıştırmalar

C# Metotlar ve Metot Tanımlama

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

İş Parçacıkları (Threads)

KARAR YAPILARI. Acaba hangi yöne gitmeliyim? Oturduğun yerden kalkıp, kapıya varana kadar kaç kez karar verdiniz biliyor musunuz?

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

Ders 8: Metotlar. barisgokce.com

Görsel Programlama DERS 12. Görsel Programlama - Ders12/

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

JAVA ile DAĞITIK PROGRAMLAMA

Dağıtık Sistemler CS5001

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Java da İşleçler, Ders #3 (4 Kasım 2009)

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

8- PROGRAM YAPISAL KOMUTLARI ve. M.ilkucar MAKU MYO 1

Transkript:

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

Bir çok geliştirici programlarını doğrusal(linear) bir şekilde oluşturmaktadır. Böyle bir durumda tek bir processin işini bitirmesi beklenmekte ve ardından bir sonraki kod parçasına geçilmektedir. Günümüzde ise bu şekilde(tek process tek thread) olduğu yaklaşım sınırlılıklara sahiptir.

İş Parçacığı (Thread) İş parçacığı, processin en küçük yürütme birimidir. Bir processin çok sayıda threadi olabilir. Her bir thread farklı bir işlemcide veya işlemcinin çekirdeğinde icra edilebilir.

Çoklu İş Parçacıkları (Multiple Threads) Bir çok metodu arka planda System.Threading namespace ini kullanarak çalıştırmak mümkündür. Bu isim alanı içerisinde kullanılan metot ise ThreadPool.QueueUserWorkItem dır.

Thread Havuzu (ThreadPool) class Program { static void Main(string[] args) { ThreadPool.QueueUserWorkItem(ThreadProc); Console.WriteLine("Ana thread işlem yapıyor ve ardından uyumakta"); Thread.Sleep(5000); Console.WriteLine("Ana threadten çıkılıyor"); static void ThreadProc(object stateinfo) { Console.WriteLine("Thread çalışıyor");

class Program { static void Main(string[] args) { string state = "Merhaba Bilgisayar Mühendisliği ; ThreadPool.QueueUserWorkItem(ThreadProc,state); Console.WriteLine("Ana thread işlem yapıyor ve ardından uyumakta"); Thread.Sleep(5000); Console.WriteLine("Ana threadten çıkılıyor"); static void ThreadProc(object stateinfo) { Console.WriteLine("Gelen ifade:"+stateinfo.tostring());

Eğer threadlerin eş zamanlı olarak çalışması gerekiyorsa, ThreadPool.QueueUserWorkItem metodu bir çok defa çağrılabilir. ThreadPool.QueueUserWorkItem(ThreadProc, Thread 1 ); ThreadPool.QueueUserWorkItem(ThreadProc, Thread 2 ); ThreadPool.QueueUserWorkItem(ThreadProc, Thread 3 ); ThreadPool.QueueUserWorkItem(ThreadProc, Thread 4 ); Thread havuzunda varsayılan olarak, işlemci başına maksimum 250 çalışan thread bulunabilir.

Background & Foreground Threadler Ana uygulama her zaman için önplandaki (foreground) thread dir. Ön plandaki thread aktif olduğu sürece, uygulama çalışmaya devam eder. Arkaplandaki threadler, ön plandaki threadler çalışmalarını bitirince çalışmalarını sonlandırırlar.

IsBackground : Bu özellik sayesinde thread in arka planda çalışan bir thread olup olmadığı kontrol edilebilir.

class Program { static void Main(string[] args) { ThreadPool.QueueUserWorkItem(ThreadProc,"Thread 1"); ThreadPool.QueueUserWorkItem(ThreadProc, "Thread 2"); ThreadProc("Thread 3"); ThreadPool.QueueUserWorkItem(ThreadProc, "Thread 4"); Console.WriteLine("Ana thread çalışmakta ardından uyumakta"); Thread.Sleep(5000); Console.WriteLine("Ana threadten çıkılıyor"); static void ThreadProc(object stateinfo) { string state = (string)stateinfo; if (Thread.CurrentThread.IsBackground == true) Console.WriteLine("Arkaplan threadinden merhaba"+state); else Console.WriteLine("Önplan threadinden merhaba"+state);

Thread lerin Yönetimi Bir metodu arkaplan threadi olarak çalıştırmak her zaman yeterli olmayabilir. Threadleri manual olarak başlatmak, durdurmak, yeniden başlatmak ve sonlandırmak gerekebilir. Threadler ile bu şekilde çalışmak ise kaynak çatışmalarına (resource conflicts) neden olabilir.

Başlatma / Durdurma Bir thread, Thread nesnesi oluşturulduktan sonra Thread.Start ile başlatılabilir. Sonlandırmak için ise Thread.Abort kullanılır. (Abort durumunda ThreadAbortException uyarısı alınır ve bunun yakalanması ve ardından finally bloğu ile tüm kaynakların serbest bırakılması gerekmektedir.)

class ThreadTest { static void Main( ) { Thread t = new Thread (WriteY); t.start(); for (int i = 0; i < 1000; i++) Console.Write ("x"); static void WriteY( ) { for (int i = 0; i < 1000; i++) Console.Write ("y");

class Program { static void Main(string[] args) { Thread DoWorkThread = new Thread(new ThreadStart(DoWork)); DoWorkThread.Start(); Thread.Sleep(5000); DoWorkThread.Abort(); Console.WriteLine("Main threadi sonlanmakta"); Thread.Sleep(6000); public static void DoWork() { Console.WriteLine("DoWork metodu başka bir threadin içinde çalışmaktadır"); try { Thread.Sleep(5000); catch (ThreadAbortException ex) { Console.WriteLine("Thread iptal edilmiştir"); finally {Console.WriteLine("Kaynaklar serbest bırakılmakta"); Console.WriteLine("DoWork sonlandırılıyor");

Bir thread nesnesi oluştrulduktan sonra bu nesnenin önceliği Thread.Priority özelliği ThreadPriority numaralandırıcısı kullanılarak düzenlenebilir. Thread önceliği, işletim sisteminin threadi nasıl zamanlayacağını (schedule time) kontrol eder.

ThreadPriority 4 kategori olarak değer almaktadır: Highest AboveNormal Normal Varsayılıdır. BelowNormal Lowest

Durumlar (Thread State) Thread in durumu Thread.ThreadState özelliği yardımıyla öğrenilebilir. Threadler aşağıdaki durumlardan herhangi biri veya birkaçında olabilirler. - UnStarted - AbortRequested - Running - Aborted - Stopped - WaitSleepJoin - SuspendRequested - Suspended

Kaynaklara Erişimin Senkronize Edilmesi Eğer bir uygulama herhangi bir dosyaya yazma işlemi yapacaksa, dosyayı kilitler. Bu işlem, diğer uygulamaların bu dosyaya erişmesinin önüne geçer. Diğer uygulama dosyaya erişmek isterse ya kilidin açılmasını bekleyecek ya da dosyaya erişim istemini iptal edecektir.

Paylaşımlı kaynaklar üzerinde çalışan çok threadli uygulamalarda da benzer durum söz konusudur. Bu problemlerin giderilmesi için.net sınıf kütüphanesi senkronizasyon nesneleri oluşturmuştur. Bu nesneler yardımıyla kaynaklar, threadler arasında eş zamanlı olarak koordine edilebilir.

Senkronizasyona gereksinim duyan kaynaklar şu şekilde olabilir: Sistem kaynakları(örn:iletişim portları) Çoklu processler tarafından paylaşılan kaynaklar(file handles) Çoklu threadler tarafından erişilen nesneler.

Monitor Monitor sınıfı kullanılarak kodun belirli bir kısmı kilitlenebilir. Kilit açılıncaya kadar diğer threadler bu kısma erişemezler. Bu sınıfın Monitor.Enter() ve Monitor.Exit() metotları kullanılabileceği gibi lock anahtar sözcüğü de kullanılabilir.

Reader/Writer Bazı durumlarda kod bloğu üzerinde bir thread değişiklik yaparken başka bir thread in okuma yapmasına izin verilebilir.

Interlocked Temel aritmatiksel işlemleri Thread güvenli olarak yapabilmek için Interlocked sınıfı kullanılır. Bu sınıf, atomik işlemleri aşağıdaki metotları çağırarak gerçekleştirir. - Increment - CompareExchange - Decrement - Add - Exchange -Read