Pendahuluan

Berikut penjelasan awal tentang Thread .

Tentang Concurrency .

Jadi 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.

Sementara Concurrency, berarti :

artinya satu core CPU memproses Thread secara bergantian dalam hitungan milliseconds, untuk menimbulkan efek bahwa satu CPU menjalankan banyak proses dalam satu waktu.


Bagaimana untuk kasus multiple processor ?


Concurrency awalnya adalah untuk satu core CPU.

Pada zaman sekarang, CPU sudah mempunyai banyak core, misalnya :

  • Intel Core i7 , berbasiskan 4 atau 8 core processor didalamnya.
  • Intel Core i9 , berbasiskan 8 atau 16 core processor didalamnya.
  • dll.

Sehingga “sepertinya” kita tidak perlu lagi memperebutkan satu core CPU diwaktu melakukan eksekusi Thread bukan ?

Seperti contoh kasus di artikel tentang Concurrency ini.

Kalau ada misalnya 3 proses yang berbeda pada saat yang bersamaan.

  • proses cek saldo
  • proses transfer uang
  • proses tarik tunai

Maka dengan Intel Core i7 saja yang punya 4 core, akan bisa memproses 3 proses diatas secara berbarengan, bukan lagi berganti-gantian.

Benar-benar pada waktu dan saat yang sama.

Sehingga yang terjadi adalah :

  • Core 1 akan memproses proses cek saldo.
  • Core 2 akan memproses proses transfer uang.
  • Core 3 akan memproses proses tarik tunai.
  • Core 4 akan ngganggur.

Nganggur ?

Tidak..tidak mungkin..

CPU sepertinya tidak akan dibiarkan nganggur oleh Operating System diatasnya.

Karena Thread dan Proses yang ada di sebuah komputer banyak sekali, maka tergantung dari OS diatasnya, mengoptimalkan penggunaan Core CPU yang ada di komputer tersebut.

Bisa saja sebuah Core CPU nganggur, misalnya karena kebutuhan untuk menghemat daya.

Tetapi secara konsep, dengan banyaknya Core CPU, maka kita dapat memproses banyak Thread secara “benar-benar” bersamaan.

Nah ini yang disebut sebagai Paralelism.

Paralelism memanfaatkan fasilitas multicore processor dan multiprocessor untuk memaksimalkan fungsionalitas dari komputer.


Bagaimana caranya ?


Karena ini melibatkan lebih banyak core dan processor, maka caranya juga akan lebih kompleks dibandingkan hanya dengan 1 core processor saja.

Karena yang akan diperhitungkan adalah :

  • Bagaimana paralelism di level hardware nya ?
    • di level instruction dan data stream di CPU nya sendiri.
    • di level pengelolaan memori dan pengalokasian CPU nya.
    • di level model komunikasi memori nya.
  • Bagaimana paralelism di level software nya ?
    • di level kernel untuk mengatur instruction set.
    • di level compiler di bahasa pemrograman untuk memanfaatkan fitur multi processor ini.

Oleh karenanya banyak strategy yang akan kita lihat ketika melihat kasus Paralelism ini.

Contohnya :

  • Single instruction single data (SISD).
  • Single instruction, multiple data streams (SIMD).
  • Multiple instruction, single data streams (MISD).
  • Physically centralized memory, uniform memory access (UMA) .
  • Instruction-level parallelism (ILP).
  • Thread-level or task-level parallelism (TLP).
  • Data-level parallelism (DLP).
  • Transaction-level parallelism
  • dll

Tentunya sebagai Software Engineering, dalam keseharian kita tidak akan menyentuh hal-hal seperti diatas.

Tetapi mengetahui mengenai kompleksitas dan cara bekerja di layer lebih bawah akan membantu kita memahami program kita berjalan.

Kita lanjut ke Concurrency vs Paralelism .