thread oluşturma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
thread oluşturma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

 Thread Nedir?

Bir thread, bir process içerisindeki yürütme birimidir. Bir process'in aynı anda birden fazla işi yapmasını sağlayan yapılardır. Bir process, yapısında birden fazla thread bulundurabilir, bu yapılara multithreading denir. 

Process Nedir?

Process, ihtiyaç duyulan tüm kaynaklar ile birlikte belleğe yüklenmiş bir programdır. Her process'in ihtiyaç duyduğu temel kaynaklar; register, counter ve stack'tir. Her processin ayrı bir bellek adresi vardır, bu da her işlemin bağımsız olarak çalıştığı ve diğer işlemlerden izole edildiği anlamına gelir. Yani bir process çalışırken yalnızca kendini çalışıyor zanneder. Diğer işlemlerde paylaşılan verilere doğrudan erişemez.

Process vs Thread

  • Bir thread’in oluşturulması ve sonlandırılması process’lere göre daha kısa sürer
  • Process’ler birbirinden izole bir şekilde çalışırken, thread’ler aynı bellek kaynağını paylaşır
  • Process’ler, thread’lere göre daha fazla kaynak tüketimi yaparlar
  • Bir process bloklanırsa başka bir process işlemini gerçekleştiremez. Öncelikle ilk process’in işini bitirmesini bekler. Ancak bu durum thread’lerde geçerli değildir. Bir thread başka bir thread bloklansa bile çalışabilir.
  • Ölçeklenebilirlik açısından thread’ler daha avantajlıdır. Process’lerin ölçeklendirilmesi için çok işlemcili yapı gerekmektedir. Bu da processler’de ölçeklendirmenin donanımsal olarak yapıldığını bizlere gösteriyor. thread’lerde ise çok çekirdekli işlemcilerde birden fazla thread farklı çekirdeklerde çalıştırılabilir.

C Programlamada Thread Oluşturma

Linux işletim sistemini kullanarak thread'leri kolaylıkla oluşturabiliriz. Şimdi ilk örneğe bakalım:

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

void *worker_thread(void *arg)

{

        printf("This is worker_thread()\n");

        return NULL;

}

int main()

{

        pthread_t my_thread;

        int ret;

        printf("In main: creating thread\n");

        ret = pthread_create(&my_thread, NULL, &worker_thread, NULL);

   if(ret != 0) {

                printf("Error: pthread_create() failed\n");

        }

        pthread_join(my_thread, NULL);

        return 0;

}
Çıktı:



Main thread, worker_thread yürütmek için bir thread oluşturacaktır. Main de pthread_t türünde my_thread adında bir değişken bildirdik. Bir thread oluşturmak için pthread_create() fonksiyonunu kullandık. Bu fonksiyon 4 tane değişken alır. Bunlar:
  • İlki, my_thread için bir pointer,
  • İkincisi, nitelikleri belirtir,
  • Üçüncüsü, thread için yürütülecek olan fonksiyon,
  • Dördüncüsü, worker_thread fonksiyonuna argüman göndermek için kullanılır.
pthread_join fonksiyonu ile, bir thread'in sonlanmasını bekleyebiliriz. Bu fonksiyonun kullanıldığı thread, sonlanması beklenen thread sonlanana kadar bloklanacaktır.

Başka bir örnek daha, bu örnekte 5 tane thread oluşturduk:

 

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

#define N 5

void *worker_thread(void *arg)

{

        printf("This is worker_thread #%ld\n", (long)arg);

        return NULL;

}

int main()

{

        pthread_t my_thread[N];

        long id;

   int ret;

        printf("In main: creating thread\n");

        for(id = 1; id <= N; id++) {

                ret =  pthread_create(&my_thread[id], NULL, worker_thread, (void*)id);

                if(ret != 0) {

                        printf("Error: pthread_create() failed\n");

                }

        }

        for(id = 1; id <= N; id++) {

pthread_join(my_thread[id], NULL);

  }

        return 0;

}


Çıktı:





Kaynaklar:

http://alpegeakarsu.com/process-ve-thread-nedir/

https://demirten.gitbooks.io/linux-sistem-programlama/content/threads/types.html

https://devnot.com/2021/thread-nedir-detayli-bir-thread-incelemesi/

https://www.elektrikport.com/teknik-kutuphane/thread-nedir-thread-cde-nasil-kullanilir-ve-nasil-yazilir/23510#ad-image-0