Nov 14, 2012

C# proqramlaşdırmada "multithreading"

   Bütün proqramlaşdırma dilləri bildiyimiz kimi kodların yazılma ardıcıllığı ilə kodlardakı əmrləri icra edərək işləyir. Buna isə tək kanallı proqramlaşdırma demək olar.
   Bu yazımda isə yuxarıda da qeyd etdiyim kimi və tək kanallı
proqramlaşdırmadan fərqli olaraq, çox kanallı proqramlaşdırmadan yazacam. İngilis dilində və proqramlaşdırma termini olaraq bunu "multithreading" adlandırırlar.
   Çox kanallı proqramlama isə, hal-hazırda sizin qarşınızda olan şeydir :). Nədir bu? Bu o deməkdirki, siz qarşınızda hal-hazırda bu yazını oxuyursunuz, eyni zamanda arxada musiqi dinləyə, kənarda başqabir pəncərədə video izləyə, sosial şəbəkələrdə gəzişə və ya skype (İM tipli) proqramlarla başqaları ilə yazışa bilərsiniz. Baxın bu çox kanallı proqramlaşdırmadır. 
   Proqlaşdırmada isə bunu thread anlayışı ilə həyata keçirmək olur. Kiçik bir örnəkdə verim, deyəlimki bir application yazmısınız və bu məlumat bazasından geniş həcmli məlumatı sizin ekranınızda göstərməlidir. Və paralelində isə hər hansı bir yerdə gələn məlumatın sayını artan ardıcıllıqla göstərməlidir. Bunu adi qaydada edərkən o halla qarşılaşacaqsınızki. proqram bir müddətlik donacaq və hər şey bitdikdən sonra ekrana lazımı məlumatları birdən gətirəcək və sizin prosesdən xəbəriniz olmayacaq. Amma bunu thread proqramlaşdırma ilə etdikdə isə gedən prosesi siz ardıcıllıqla görə bilərsiniz.
  Kiçik bir örnəklə davam edək:

public void yarıshci1()


        {

            for(int i=0;i<50;i++)  

            {
                System.Threading.Thread.Sleep(1);
                Application.DoEvents();
            }
            label1.Text = “Bu birinci  yarışçıdır”;
        }

public void yarıshci2()


        {

            for(int i=0;i<50;i++)  

            {
                System.Threading.Thread.Sleep(1);
                Application.DoEvents();
            }
            label2.Text = “Bu ikinci yarışçıdır”;
        }

 private void button1_Click(object sender, System.EventArgs e)


        {

            yarıshci1();

            yarıshci2();
        }

   Kodun bu şəkildə yazılmağında bir problem yoxdur, amma burda unutduğumuz bir şey var proqram işləyəndə hər zaman 1-ci yarışçı həmişə birinci olacaq. Bu isə haqsızlıqdı :).
  Baxın beləməqamda multithreading işə əl qatır. Aşağıdakı kodlrı yazaq:

        System.Threading.ThreadStart t_basla1;


        System.Threading.ThreadStart t_basla2;

        System.Threading.Thread t1;


        System.Threading.Thread t2;


    private void button1_Click(object sender, System.EventArgs e)


        {

            t_basla1 = new System.Threading.ThreadStart(yarıshci1);

            t_basla2 = new System.Threading.ThreadStart(yarıshci2);
            t1 = new System.Threading.Thread(t_baslat1);


            t2 = new System.Threading.Thread(t_baslat2);

            t1.Start();


            t2.Start();

        }

   Belə olduğu halda isə iki method-da demək olarki eyni anda işləyəcək, fərq olur amma millisekodlarla. Bu isə təsir etməyən bir fərqdir.
   Thread-in də özünə uyğun özəllikləri vardır.
Suspend - thread-i dayandırmaq üçündür. Bu halda dayandırılan yerdən başlatmaq olur.
Abort - buda dayandırmaq üçündür amma bunu olduğu yerdən işə salmaq olmur ancaq yenidən başlatmaq olur.
Resume - thread-i qaldığı yerdən başlatmaq üçündür.
İsAlive - thread-in yaşayıb yaşamamağını öyrənir.
Priority - hansı thread-in daha vacib və öncəliyini təyin etmək üçündür.

  Bu qədər :). Az olsada ümid edirəmki kimin üçünsə faydalı olar.

No comments:

Post a Comment

Zəhmət olmasa şərhlərinizi yazın