Apa itu Thread dan Concurrency ? dan Perbedaan Multiprocessing, Multiprogramming dengan Multithreading.
Published: 2021-04-04 12:20:20

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9g6f7s6bawhdlzdqvflf.jpg)

Disini saya akan memberikan artikel tentang Thread dan Concurrency, dan apa perbedaan Multiprocessing, Multiprogramming dengan Multithreading.

---

### 1. Apa itu Thread?

Thread adalah sekumpulan instruksi yang dirancang untuk dijadwalkan dan dijalankan oleh CPU dari sebuah proses, proses ini adalah sebuah program yang sedang berjalan.

Sebuah program dapat mempunyai banyak thread dalam satu waktu dan dapat menangguhkan atau mengakhiri thread tersebut jika program sudah selesai berjalan atau ditutup.

---

#### Jenis Thread
Threads terbagi menjadi dua jenis, yaitu **Single Thread** dan **Multi Thread**.
* Single Thread : proses hanya mengeksekusi satu thread saja pada satu waktu.
* Multi Thread : proses dapat mengeksekusi sejumlah thread dalam satu waktu.

Multi Thread akan saya jelaskan secara komprehensif di konsep **Multithreading**.

---

#### Ideologi pada Thread
Thread memiliki dua bentuk proses, atau yang biasa saya sebut sebagai Ideologi (agar mudah diingat haha) yaitu **Concurrency** dan **Parallelism**.
* Concurrency : Concurrency adalah sebuah program yang memproses lebih dari satu tugas pada waktu yang sama, concurrency di desain agar bisa dijalankan secara multi thread. Analoginya sama seperti 2 antrian pada 1 kasir.
* Parallelism : Parallelism adalah sebuah program yang di mana satu tugas dibagi menjadi sub-tugas yang lebih kecil yang diproses secara bersamaan atau paralel, parallelism di desain agar bisa dijalankan secara multi process. Analoginya sama seperti 2 antrian pada 2 kasir.

**Concurrency** akan saya jelaskan secara komprehensif di bagian berikut.

---

### 2. Apa itu Concurrency?

Concurrency adalah sebuah program yang memproses lebih dari satu tugas pada waktu yang sama.

Concurrency dapat meningkatkan kecepatan eksekusi secara keseluruhan dalam sistem yang multi prosesor dan multi core.

---

#### Model pada Concurrency
Concurrency memiliki berbagai model dimana setiap thread berkomunikasi satu sama lain.

##### Shared State vs. Separate State

Shared State berarti bahwa berbagai thread dalam sistem akan berbagi beberapa state di antara mereka. state adalah sebuah kumpulan data.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pkwahjsj1ywqrnei3des.png)

Separate State berarti bahwa thread yang berbeda dalam sistem tidak berbagi state apa pun di antara mereka. Jika state yang berbeda perlu berkomunikasi, mereka melakukannya dengan menukar objek yang tidak dapat diubah atau istilahnya adalah **immutable** di antara mereka, atau dengan mengirimkan salinan objek (atau data) di antara mereka.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/54zp10xvy58023okivr0.png)

##### Parallel Workers

Parallel Workers adalah model yang dimana setiap task yang masuk ditugaskan ke worker yang berbeda.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rz9y4uxzebcexgfrhoek.png)

Parallel Workers dapat dirancang untuk menggunakan shared state atau separate state, yang berarti worker memiliki akses ke beberapa shared state (objek atau data bersama), atau mereka tidak memiliki shared state.

Dalam model Parallel Workers, program atau delegator mendistribusikan task masuk ke worker yang berbeda. Setiap worker menyelesaikan task secara penuh. worker bekerja secara paralel, berjalan di thread yang berbeda, dan mungkin pada CPU yang berbeda.

##### Event Driven System

Event Driven System adalah model yang dimana setiap worker hanya mengerjakan sebagian dari task penuh, setelah sebagian selesai maka dia akan melanjutkannya ke worker lain.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h3zq6xsws5vkk0ip4oe5.png)

Sistem pada model Event Driven System biasanya di desain menggunakan Non-Blocking IO, Non-Blocking IO berarti bahwa ketika worker memulai operasi IO (misalnya membaca file atau data dari koneksi jaringan) worker tidak menunggu hingga panggilan IO lain selesai. 

Salah satu yang paling populer menggunakan model Event Driven System adalah Node.js.

---

### 3. Apa itu Multiprocessing?

Multiprocessing adalah menjalankan banyak proses menggunakan banyak processor secara bersamaan.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2kkvdtr36exgtof1f4e.png)

Keuntungan utama dari multiprocessing adalah kecepatan, dan  kemampuan untuk mengelola informasi dalam jumlah yang lebih besar.

---

### 4. Apa itu Multiprogramming?

Multiprogramming adalah lebih dari satu proses yang berjalan pada satu waktu, ini meningkatkan pemanfaatan CPU dengan mengatur task (kode dan data) sehingga CPU selalu memiliki satu proses untuk dieksekusi.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j95tuwzdkhe3ythcdzaq.jpg)

Tujuan dari multiprogramming untuk menyimpan banyak task di memori utama. Jika satu task diisi dengan Input / output, CPU dapat ditugaskan ke task lain.

---

### 5. Apa itu Multithreading?

Multithreading adalah teknik dimana beberapa thread dibuat dari suatu proses untuk meningkatkan kecepatan komputasi sistem.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7h89c7wfqrjmqdvkigc.png)

Dalam multithreading, banyak thread dalam suatu proses dijalankan secara bersamaan dan pembuatan proses dalam multithreading dilakukan secara economical. Economical berarti mereka berbagi sumber daya prosesor yang sama.

---

Sekian artikel rangkuman yang bisa saya tulis dan sampaikan, semoga bermanfaat!.

---

Referensi : 
* Wikipedia
* [difference between multiprogramming and multithreading](https://www.geeksforgeeks.org/difference-between-multiprogramming-and-multithreading/)
* [concurrency models](http://tutorials.jenkov.com/java-concurrency/concurrency-models.html)
* [difference between concurrency and parallelism](https://www.geeksforgeeks.org/difference-between-concurrency-and-parallelism/)
* [multiprocessing](https://www.britannica.com/technology/multiprocessing)