Pendahuluan

Secara natural, sistem komputer mempunyai mekanisme pengelolaan sumber daya komputer yang tidak sederhana.

Dari sumber daya CPU, memori, IO, bandwidth, dll.

Dan semuanya mesti dikelola biasanya pada saat yang bersamaan.

Sehingga sistem komputer membutuhkan banyak program/tugas kecil-kecil yang mesti bisa berjalan pada saat bersamaan atau berbarengan untuk menangani hal tersebut.

Katakan lah misalnya :

  • mengelola akses ke perangkat keras, misalnya ke VGA card, jaringan, keyboard, dll, yang berjalan bersamaan.
  • menangani request HTTP secara serentak pada saat belanja online / flash sale.
  • memproses banyak tab yang terbuka di browser ketika mencari sesuatu.
  • memproses auto saving, code suggestion, dll di waktu bekerja dengan text editor, word, excel, IDE.
  • dll

Thread


Tugas-tugas diatas dikelompokkan dalam unit-unit kecil yang dinamakan berbeda tergantung dari jenisnya.

Misalnya namanya process, threads, fibers, coroutines, generators, goroutine, handler, dll.

Istilah-istilah yang semirip dan dan beririsan diantaranya.

Tetapi sebenarnya mengacu kepada task-task yang dibuat untuk kebutuhan tertentu agar bisa mengelola sumber daya dan komputasi yang dibutuhkan.

Dan 2 istilah yang paling sering dan umum digunakan adalah :

  • process
  • thread

Sekarang kita fokus ke Thread saja, dan tentu saja Thread secara Operating System / Software saja.

Karena di perangkat keras, CPU juga mempunyai istilah Thread yang sebenarnya merupakan Versi Virtual dari CPU Core

Dimana dengan Thread di perangkat keras, maka sebuah CPU core bisa dibagi lagi menjadi banyak Core Threads.

Ini yang biasanya bisa kita konfigur melalui Hyperthreading di BIOS.

Misalnya kita lihat di CPU Intel Core i9 Processor, yang mempunyai 24 Core processor, dan mempunyai 32 Thread.

Tidak..tidak..

Kita tidak membahas Thread dari sisi perangkat keras diatas.

Yang kita bahas adalah Threads secara Software / Operating System.

Walaupun ada yang membedakan antara OS/Kernel Threads dengan Software/User Threads.

Akan tetapi kita coba membahasnya dari sisi umum saja.


Thread secara sederhana adalah :

bagian eksekusi sebuah proses yang bisa dijalankan terpisah.

definisinya cukup abstrak, karena pada kenyataannya implementasinya juga berbeda-beda tergantung dari implementasi di OS maupun software nya.

Dan harap diingat, bahwa setiap proses diatas bisa saja masing-masing terdiri dari banyak thread.

Maka thread bisa saja berupa iterasi sebuah variable, eksekusi sebuah kalkulasi, dll.

Ok.. lanjuut..


Detailnya ?


Secara umum, memang Thread ini adalah bagian dari process yang sengaja dibuat agar komputer bisa efektif dalam mengelola sumber daya.

Dan pengelolaan yang paling utama dalam komputer, tidak lain tidak bukan adalah CPU.

Iyaa.. CPU itu lah otaknya.

Yang harus menyediakan waktunya untuk memikirkan bagaimana perangkat keras dan perangkat lunak yang terhubung dengannya bisa dikelola dengan baik.

Dengan hanya misalnya bermodal 2 core CPU, maka harus diatur cara agar semua kebutuhan tugas-tugas yang harus dilakukan sistem komputer berjalan dengan lancar atau “seperti” lancar.

Dengan hanya bermodal 2 core CPU, maka CPU harus bisa melakukan semuanya.

Dengan kata lain, sistem komputer harus bisa Multitasking.

Satu saat harus bisa menerima inputan dari keyboard.

Satu saat harus bisa switch ke proses saving data di word.

Satu saat harus bisa melakukan pengecekan ke internet, dll.

Dan tidak boleh berhenti, karena kalau berhenti, maka kita sebagai pengguna akan menganggap komputer kita ngehang dan ngeblock.

Seperti istilah :

Kerja keras bagai kuudaaa…

Demikian juga dengan CPU, setiap saat akan sibuk dengan Task-task atau Tugas-tugas yang dijalankan bergantian dan terpisah-pisah.

Nah, Thread ini berperan dalam hal ini.

Dengan bantuan unit komputasi yang kecil bernama Thread ini, maka Multitasking dari CPU bisa dengan lebih mudah dilakukan.

Thread yang merupakan bagian dari sebuah process, akan meminta waktu dari CPU agar dieksekusi oleh CPU pada satu waktu tertentu.

Pengaturan waktu ini dilakukan oleh Scheduler dari Operating Sytem, dengan menggunakan konsep time slicing.

Yaitu mengatur waktu dari CPU per x milisecond, agar beberapa task yang sudah dijadwalkan bisa berjalan bergantian.

Kita lanjut di artikel selanjutnya, mengenai Concurrency .