• multithreading yapılabilmesi için çok işlemci gereksinimi yoktur. tek işlemci pekala birden fazla thread'i idare edebilir. multitasking derken task daha çok bir programı tanımlarken multithreading dendiğinde thread bir task içinde eşzamanlı çalışabilen kod parçacıklarını tanımlar.
  • (bkz: flashget)(bkz: mass downloader)
  • dot net uzerinde multithreading ile ilgili guzel bir yazi : http://www.yoda.arachsys.com/…p/multithreading.html
  • threadlerin ayni address space icinde bulunmasiyla single threadingden ayrilan bir thread model.
  • c#'da nasıl yapıldığını merak edenlerin http://kerem.koseoglu.info/…iew.aspx?cat=tek&id=129 adresini ziyaret edebileceği kavram...
  • sürükle bırak programcısı ile gerçek programcıları ayıran önemli bir konu.
    yalnız yeni başlayanlar için şöyle bir test yapmak yerinde olacaktır
    3 tane fonksiyon yazın
    private void fonk1()
    {
    textbox1.text+= "thread1 başlangıç zamanı:" + datetime.now.tostring() + "\r\n";
    string[] deneme = new string[1000000];
    for (int i=0;i<1000000;i++)
    {
    deneme[i]=datetime.now.tostring();
    }
    textbox1.text+= "thread1 bitiş zamanı:" + datetime.now.tostring() + "\r\n";
    }

    private void fonk2()
    {
    textbox1.text+= "thread2 başlangıç zamanı:" + datetime.now.tostring() + "\r\n";
    string[] deneme = new string[500000];
    for (int i=0;i<500000;i++)
    {
    deneme[i]=datetime.now.tostring();
    }
    }

    private void fonk3()
    {
    string[] deneme = new string[500000];
    for (int i=0;i<500000;i++)
    {
    deneme[i]=datetime.now.tostring();
    }
    textbox1.text+= "thread2 bitiş zamanı:" + datetime.now.tostring() + "\r\n";
    }

    ardından tek başına fonk1'i bir thread içinde çalıştırın
    thread1 başlangıç zamanı:16.06.2006 00:50:49
    thread1 bitiş zamanı:16.06.2006 00:51:16
    geçen süre:27 saniye

    ardından 2 farklı threadde fonk2 ve fonk3 fonksiyonlarını çalıştırın

    thread2 başlangıç zamanı:16.06.2006 00:51:18
    thread2 bitiş zamanı:16.06.2006 00:51:45
    geçen süre:27 saniye

    sonuç: tek işlemcili bilgisayarlarda birim zamanda yapılan iş thread sayısından bağımsızdır. ne kadar çok threadiniz olursa olsun sonuçta aynı işi yaparsınız
  • koca bir dosyadan byte byte veri okurken program penceresini sağa, sola, aşağı, yukarı, içeri ve dışarı* oynatmaya olanak sağlayan olay.
    (bkz: işte bunu seviyorum)

    tabii yazılımı c# ve .net ortamlarında geliştiriyorsanız, sonradan yaratılan bir thread'in ana form'a erişebilmesi için checkforillegalcrossthreadcalls değerini false yapmanız gerekir. initializecomponent() metodu çağırıldıktan hemen sonra yapabilirsiniz bu işlemi mesela.

    yıllar sonra gelen edit: vay ulan bu muymuş multithreading, bu kadar mıymış? peki öyle olsun, canın sağolsun kardeş.
  • aynı adres alanında birden çok thread'in aynı anda çalışmasıdır. kaynaklar tek bir thread'e açık olması büyük bir problemdir. (mutual exclusion) bu durumda programın critical section'a girip sadece bir thread'e geçiş izni vermesi gerekmektedir. yalnız bunların önceliği ve giriş çıkışı problemdir. yönetimleri için çeşitli algoritmalar vardır. algoritmaların isimleri de ayrıca orijinaldir.

    düzenleyici algoritmalarına örnekler:

    - round robin: bir fransız kralına sorunlarını bildirmek isteyen ancak başlarını omuzlarında isteyen vatandaşların girdiği sıra
    sisteminden gelmektedir. bu da bir daire sistemidir. bölünebilir işlemler için uygulanan, eşit zaman aralıkları (quanta/quantum) verilen algoritmadır. açlık sorunu olmaz. öncelik yoktur. uygulaması kolaydır. uzun işlemler için sorun olsa da time-sharing ile sorun giderilebilir.

    - lottery : rastgele işlem sırası veren sistemdir. her işleme en az bir bilet verir. önceliği olan işlemler daha fazla bilet alabilir. bölünmüyordu hatırladığım. yine de preemptive mi diye bakın.

    - deadline'ı erken olana öncelik: (edf- earliest deadline first) bölünebilir işlemler için iyidir. en kısa işleme öncelik verenin bölünebilir olanıdır. mesela sırası gelen işlemin kalan süresi, o sırada girenden büyükse. diğer işlem alınır sıraya. kalan parçasını sonra tamamlar. utilization'ı yüksek.

    kaynak kullanma algoritmaları (mutex ve semaphore'lar faydalıdır):

    - uyuyan berber: örneğin berber aynı anda 3 kişiyi kabul edebilir. kimse yokken berber uykudadır. gelen müşteri onu uyandırır. 3 kişi içerde olunca diğer müşteriler bekleme kuyruğuna girer ya da vaz geçer.

    -dining phylosophers (akşam yemeği yiyen filosoflar): yuvarlak masa. bir filosof düşünebilir, kaşıkları alabilir, yer, kaşıkları bırakır. ancak yiyebilmesi için 2 kaşık gereklidir. o yüzden iki yanındaki kaşıklarını bıraktıktan sonra, düşünme evresinden cıkar.

    -unisex tuvalet: içerde ya bayan ya erkek olabilri. şirket verimi arttırmak için az tuvalet yapmıstır... (hak veririm, tuvalet olayı biz bayanlar için dedikodu alanıdır... ama neden unisex yani? ) tuvalete bir bayan girdikten sonra ancak diğer bayanlar kabul edilir. dolu olunca da alımlar durur. çıkan son kişi (benim uyguladığımda) bir sonraki erkeğe işaret verir. bu sefer erkekler girer.

    bu örneklerle beraber, elinizdeki semaphoreları, mutexleri iyi kullanın. kaynakların unsigned olmasına ve threadlerin aynı anda çalışabilecek türden olmasına dikkat edin.
  • ilk kural: "optimal number of thread in any system is one thread".
  • java'da artık runnable ile yapıyoruz beyler, kaçıran varsa duyurayım
hesabın var mı? giriş yap