PENGERTIAN
Thread
adalah sekumpulan perintah atau instruksi yang dapat dilakasanakan secara
sejajar dengan ulir lainnya, dengan menggunakan cara time slice (ketika satu CPU melakukan perpindahan antara satu ulir
ke ulir lainnya) atau multiprocess (ketika
ulir-ulir tersebut dilaksanakan oleh CPU yang berbeda dalam satu sistem. Ulir sebenarnya
mirip dengan proses, tetapi cara berbagi sumber daya antara proses dengan ulir
sangat berbeda.
Multiplethread dapat
dilaksanakan secara sejajar pada sistem komputer. Secara umum multithreading melakukan time-slicing (sama dengan time-division multipleks),
di mana sebuah CPU bekerja pada ulir yang berbeda, di mana suatu kasus
ditangani tidak sepenuhnya secara serempak, untuk CPU tunggal pada dasarnya
benar-benar melakukan sebuah pekerjaan pada satu waktu. Teknik penggantian (switching) ini memungkinkan
CPU seolah-olah bekerja secara serempak.
Thread
saling berbagi bagian program, bagian data dan sumber daya sistem operasi
dengan thread lain yang mengacu pada proses yang sama. Thread terdiri atas ID
thread, program counter, himpunan register, dan stack. Dengan banyaknya control
thread proses dapat melakukan lebih dari satu pekerjaan pada waktu yang sama. Sebelum
memulai thread, anda harus tau dulu tentang proses. Proses itu terbagi menjadi
dua macam, yaitu :
1.
Proses berat
(heavyweight) disebut dengan proses tradisional.
2.
Proses ringan
(lightweight) disebut dengan thread.
THREAD PADA ANDROID
Dengan semakin umumnya penggunaan chip multicore pada
smartphone, penggunaan thread yang memungkinkan beberapa task berjalan secara
paralel semakin penting untuk meningkatkan kinerja app. Multicore sudah
disupport Android sejak versi HoneyComb (3.0). Selain itu, app Android yang
terlalu lama berproses dan membuat user interface “hang” akan terkena
error ANR (Application Not Responding). Thread dapat digunakan untuk mengatasi
ini dengan memindahkan aktivitas yang lama pada thread yang terpisah.
Pada Android, yang
dasarnya adalah Linux, setiap app yang dijalankan berada di proses
yang terpisah. Satu proses kemudian dapat memiliki satu atau lebih thread.
Thread-thread di dalam proses yang sama berbagi memory, walaupun setiap thread
punya register dan stack sendiri. Proses independen satu sama lain, sedangkan
thread-thread pada proses yang sama saling terkait (gambar bawah).
Kenapa menggunakan thread? karena untuk men-create proses
mahal dari sisi resources dibandingkan thread dan komunikasi antar thread lebih
mudah dibandingkan antar proses. Kasus yang menarik di desktop adalah
browser Chrome vs Firefox. Setiap tab pada Chrome menggunakan proses yang
berbeda, sedangkan Firefox menggunakan thread yang berbeda untuk setiap tab.
Coba lihat task manager saat membuka banyak tab di Chrome, akan banyak proses
bernama Chrome.exe. Pembuat Chrome beralasan dengan arsitektur seperti ini,
jika salah satu tab “hang” maka tidak akan mempengaruhi tab yang lain. Tapi
efek sampingnya, Chrome membutuhkan lebih banyak memori dibandingkan
Firefox. Firefox sebenarnya juga menggunakan multi proses, tapi hanya
untuk plugin, karena plugin sering menjadi sumber masalah.
Terlepas
dari keunggulannya, penggunaan multithread atau multiproses juga dapat
menimbulkan masalah, misalnya sinkronisasi, deadlock, race condition dan
starvation (dipelajari di kuliah sistem operasi). Program juga lebih
sulit didebug dan kadang malah kinerjanya lebih jelek. Walaupun Java
dan Android telah menyediakan berbagai library untuk memudahkan pembuatan
program multithreading, tetap saja ini bukan hal yang mudah.
Kembali
ke Android, saat setiap app dijalankan maka app tersebut memiliki thread utama
yang disebut main thread atau UI thread. UI thread ini mengatur tampilan,
menerima event dan sebagainya. Aturan yang harus dipegang adalah:
- Jangan
memblok UI thread. Misalnya saat user menekan tombol, maka app
menjalankan program yang loop sejuta kali sehingga membuat user
interface macet. Ini akan berakibat muncul error ANR (App Not
Responding). Resources pada smartphone jauh lebih terbatas
daripada PC/laptop, sehingga aturan ini lebih ketat.
- Jangan
mengakses komponen UI di luar UI thread. Misalnya ada thread kedua dan
thread ini mengakses TextView, Button dsb. Ini dapat menyebabkan error
yang tidak terduga. Ini akan lebih jelas pada tutorial berikutnya.
Referensi :