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
• 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
06.53
Admin













0 komentar :
Posting Komentar