13 Haziran 2012 Çarşamba

Thread Kavramı

Esasında amaçın Paralel programlamayı göstermekti ama bunu analamak için thread kavrımınıda değinmek gerekmekte. Bunu da küçük bir örnekle göstermek istiyorum:

static void Main(string[] args)
        {
            Stopwatch sure = new Stopwatch();
            sure.Start();
            TekSayilariGoster();
            CiftSayilariGoster();
            sure.Stop();
            Console.WriteLine("Gecen Hesaplama Süresi: {0}", sure.ElapsedMilliseconds.ToString());
            Console.ReadLine();
        }

        private static void CiftSayilariGoster()
        {
            for (int i = 0; i < 100000; i++)
            {
                if (i % 2 == 0)
                {
                    Console.WriteLine(i);
                }
            }
        }

        private static void TekSayilariGoster()
        {
            for (int i = 0; i < 100000; i++)
            {
                if (i % 2 != 0)
                {
                    Console.WriteLine(i);
                }
            }
        }


Yukarıdaki kod  parçası basit bir şekilde Tek ve çift olan sayıları ekrana getirmekte. İlk başta TekSayilariGoster metodu daha sonra da CiftSayilariGoster metodu çalışmakta, buraya kadar bir sıkıntı yok ,fakat bu iki metodun birbirini beklemek zorunda mı? Bu yazılımcıya kalmış bir olay fakat istememesi anormal olmaz :). Bunu yapmak içinde bir paralellik kurmak gerekmekte bunuda Thread yapısı ile yapabiliriz:
static void Main(string[] args)
        {
            Stopwatch sure = new Stopwatch();
            sure.Start();
            //TekSayilariGoster();
            //CiftSayilariGoster();
            Thread thrd1 = new Thread(new ThreadStart(TekSayilariGoster));
            Thread thrd2 = new Thread(new ThreadStart(CiftSayilariGoster));
            thrd1.Start();
            thrd2.Start();
            sure.Stop();
            Console.WriteLine("Gecen Hesaplama Süresi: {0}", sure.ElapsedMilliseconds.ToString());
            Console.ReadLine();
        }

Bu kod parçasında 2 tane thread nesnesi oluşturulmuş, ThreadStart metodu ile paralel olarak çalıştırılacak metotları tanımlamaktayız. Start metodu ile de bu süreci başlatmaktayız.


Metotların içerisine breakpoint koyarak aldığım bu ekran görüntüsünde sayıların bir tek bir çift olarak geldiği görünmekte.Tatbikide her zaman bir tek-bir çift gelmek zorunluluğu yoktur.

Ekran görüntüsünde dikkat edilmesi gereken önemli bir noktada geçen Hesaplama süresinde. Çünkü bu hesaplama süresini en son ekrana bastırması gerekmekteydi, Lakin thread sayesinde Tek ve çift sayı bulma metotları tamamlanmadan kod satırı bir alt satıra geçip görevine devam etmiştir.

Konuyu toparlarsak threadler küçük bir iş parçacılarıdır. Programın Main metodunda tanımladığımız threadler var olan ana thread’e(main thread) paralellik sağlamaktadır.

0 yorum:

Yorum Gönder

 
;