Selasa, 27 Oktober 2015

Threads 

• Sebuah negara eksekusi (berjalan, siap, dll)
 • Disimpan konteks thread ketika tidak berjalan
 • Memiliki eksekusi tumpukan
 • Beberapa storage statis per-benang untuk variabel lokal
 • Akses ke memori dan sumber daya dari proses yang
          - Semua thread dari proses berbagi ini


- Threads memungkinkan beberapa eksekusi berlangsung dalam lingkungan proses yang sama
 - Proses 
         Ringan karena benang memiliki beberapa sifat dari proses
 - Multithreading 
         memungkinkan beberapa thread dalam proses yang sama

Thread Model












Manfaat Threads

• Membawa sedikit waktu untuk membuat thread baru dari suatu proses
• Kurang waktu untuk mengakhiri thread dari proses
 • Kurang waktu untuk beralih di antara dua benang dalam proses yang sama
• Sejak benang dalam memori yang sama berbagi proses dan file, mereka dapat berkomunikasi satu        sama lain tanpa melibatkan kernel

Thread Implementasi




Pop Up Thread


Pembuatan thread baru ketika pesan tiba.
(a) Sebelum pesan tiba.
(b) Setelah pesan tiba.


Thread Basics


Thread  State

Block
• Ketika thread perlu menunggu untuk sebuah acara, itu akan memblokir (menyimpan register pengguna, program counter, dan tumpukan pointer).
 • Prosesor mungkin sekarang beralih ke eksekusi benang siap lain yang sama atau proses yang berbeda.

Unblock
• Ketika acara yang thread diblokir terjadi, benang iscmoved ke antrian Siap.

Finish
• Thread akan selesai, konteks register dan tumpukan yang deallocated.



Multi threading example on a uniprocessor



Hubungan antara Threads dan Proses



Threading granularity

*Coarse Threading
      • modul individu, yang disebut sistem, yang ditugaskan untuk prosesor individu.
      • Dalam kasus mesin Sumber, ini berarti menempatkan render pada satu prosesor, AI                             (kecerdasan buatan) yang lain, fisika yang lain, dan seterusnya.
       • setiap modul utama adalah single threaded dan koordinasi kepala sekolah melibatkan                         sinkronisasi semua benang dengan benang waktu.


Posix (Portable Operating System Interface) Threads


Thread Programming


• Poin parameter obj ke struktur pthread_t, digunakan untuk menyimpan id dari benang dibuat panjang dengan rincian 
• Attr parameter poin ke obyek pthread_attr_t yang digunakan untuk mengatur sifat khusus dari benang misalnya Penjadwalan dan prioritas)
• Jika attr adalah NULL, benang akan becreated dengan penjadwalan default dan prioritas properti
• func adalah pointer ke fungsi. (Fungsi hanya dapat mengambil void * parameter) 
• Arg adalah void * yang mewakili thearguments dilewatkan ke fungsi func ketika benang dieksekusi 
• Pada keberhasilan fuction mengembalikan 0






• pthread_self () 
- Untuk obain ID-nya 
• pthread_join ()
 - Untuk bergabung atau bergabung kembali berbagai aliran kontrol 
- Ketika dipanggil, thread panggilan ditunda untl eksekusi thread target termnated 
- Sumber Pers (yaitu mencegah threads zombie)

       Example:

#include <iostream>
#include <pthread.h>
using namespace std;
int main(int argc, char** argv)
{
 pthread_t thread_a, thread_b;
 int N;
 if (argc != 2)
 {
  cout << “Error” << endl;
  return 0;
 }
 N=atoi(argv[1]);
 pthread_create(&thread_a, NULL, task1, &N);
 pthread_create(&thread_b, NULL, task2, &N);
 cout << “Waiting to join” << endl;
 pthread_join(thread_a, NULL);
 pthread_join(thread_b, NULL);
 return 0;
}

       Sample fnction for task

void* task1(void* x)
{
 int* temp = (int*) x;
 for (int count 0; count < *temp;
 count++)
{
 cout << “Thread A” << endl;
 }
cout << “Thread A Complete” << endl;
 return NULL;
 }


Setting thread attributes 

Beberapa sifat:

contention Scope
Digunakan untuk mengatur properti penjadwalan baik di dalam proses atau pada sistem global.

Stack Size & Stack Address
Memungkinkan programmer untuk mengatur seberapa besar tumpukan harus dan di mana dalam memori itu harus.

Detach State
Anda dapat membuat sebuah thread sebagai terpisah atau joinable.

Jadwal Kebijakan & jadwal Parameter.
Jika sistem operasi Anda mendukungnya Anda dapat menguraikan apa penjadwalan yang harus dilakukan dalam proses antara Proses Ringan (LWP ini). Anda bahkan dapat memberikan parameter seperti prioritas.

• Ketika threads dibuat dengan objek atribut yang sesuai mereka akan memiliki perilaku yang ditentukan.
• Untuk mengatur objek atribut kita harus memanggil
pthread_attr_init ().


#include <iostream>
#include <pthread.h>
using namespace std;
int main(int argc, char** argv)
{
 pthread_t thread_a, thread_b;
 pthread_attr_t attr;
 int N;
 if (argc != 2)
 {
  cout << “Error” << endl;
  return 0;
}
 N=atoi(argv[1]);
 pthread_attr_init(&attr);
 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 pthread_create(&thread_a, &attr, task1, &N);
 pthread_create(&thread_b, NULL, task2, &N);
 cout << “Waiting to join” << endl;
 pthread_join(thread_b, NULL);
 return 0;
}


Detached threads

Sebuah threads terpisah adalah salah satu yang tidak dilayani oleh thread lain Ketika benang dihentikan, maka secara otomatis akan direklamasi oleh sistem operasi


Terminating thread

pthread_exit ()
Fungsi mengambil pointer ke data yang yang dikembalikan ketika benang bergabung


Kapan menggunakan threads ?

• Thread yang paling cocok untuk program yang membutuhkan untuk melakukan hal-hal secara bersamaan OR memiliki sejumlah tugas yang dapat diselesaikan secara paralel untuk menghasilkan hasil.
• Saat menulis program anda menggunakan threads Anda harus mengatur program menjadi tugas diskrit yang dapat dijalankan secara bersamaan.
• Contoh:
- Masalah grafis komputer misalnya Ray tracing
- Manipulasi Matrix


References




0 komentar :

Posting Komentar