# Concurrency

Untuk kamu yang penasaran apasih latar belakang dibuatnya concurrency pada Go? Kamu wajib menonton video ini:

{% embed url="<https://www.youtube.com/watch?v=oV9rvDllKEg>" %}

Rob Pike adalah salah satu creator bahasa Go. Pak Rob bilang bahwa Concurrency itu berbeda dengan Parallelism.

Lebih mudahnya kita bisa cek slide berikut ini:

{% embed url="<https://talks.golang.org/2012/waza.slide#1>" %}

Concurrency atau konkurensi berbeda dengan paralel. Paralel adalah eksekusi banyak proses secara bersamaan. Sedangkan konkurensi adalah komposisi dari sebuah proses. Konkurensi merupakan struktur, sedangkan paralel adalah bagaimana eksekusinya berlangsung.

Pak Rob Pike bilang seperti ini:&#x20;

> Concurrency is a way to structure a program by breaking it into pieces that can be executed independently

Jadi kita membuat program dengan memecahkannya menjadi beberapa fungsi yang bekerja secara independen.

### Studi Kasus

Misalnya pada kasus bongkar barang dari truk ke dalam gudang penyimpanan.

![Ilustrasi Bongkar Barang](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MScr9vc0m4jVPhi8C8k%2F-MSfhneB2hL2xNGhaw1H%2Fbernd-dittrich-eCc7FjMoR74-unsplash.jpg?alt=media\&token=ce578a4d-3e10-461e-9070-e009bbd6df2f)

Kita anggap ada 1 orang yang akan mendata, menurunkan dan memasukkan barang ke dalam gudang. Tentunya ini akan memakan waktu yang lama.

Oke sekarang bagaimana jika kita menambahkan 1 orang lagi untuk membantu mengangkut barang? Tentunya ini akan bottleneck dari segi pendataan dan koordinasi lainnya.

Solusinya dengan pendekatan concurrency yaitu kita akan mengandalkan 3 orang yang masing-masing memiliki tugas (independen).

* Orang pertama: Bertugas mengangkut barang dari dalam truk ke Cart (tempat barang)
* Orang kedua: Membawa Cart yang sudah berisi barang ke dalam Gudang
* Orang ketiga: Mengangkut barang yang ada pada Cart untuk di data dan disusun di tempat penyimpanan dalam Gudang

Jadi berbeda konsepnya dengan paralel yang melakukan banyak hal dalam satu waktu. Pada concurrency kita mengatur bagaimana agar dapat menyesuaikan dan menyusun banyak hal dalam satu waktu.

Concurrency pada Go dapat diterapkan dengan beberapa pendekatan:

* Goroutines
* Channels
* Buffered Channels
* Range & Close
* Select

Lebih detailnya kita akan mencoba di sesi selanjutnya.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://davidwinalda94.gitbook.io/mastering-golang/concurrency.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
