author Ihsan Arif | 2 minutes

Cara Implementasi Concurrency Pattern Fan In dan Fan Out Golang

Channel dalam Go

Membuat program bersamaan di Go memiliki pendekatan yang unik. Pendekatannya adalah berbagi memori dengan berkomunikasi, bukan berkomunikasi dengan berbagi memori yang tidak diizinkan di Go. Pendekatan ini dapat dilakukan dengan menggunakan channel yang dapat digunakan oleh goroutine untuk saling berkomunikasi.

Untuk membuat channel di Go, bisa dilakukan dengan menggunakan fungsi make ().

Perhatikan bahwa saat membuat channel ada tipe data tertentu yang perlu dilampirkan. Tipe ini bisa tipe apapun yang didukung oleh Golang. Melampirkan nilai ke saluran dan mengambil nilai dari saluran dapat dilakukan menggunakan sintaks ini.

Ada beberapa pola konkurensi yang dapat digunakan untuk membuat program bersamaan di Go. Pola Pattern konkurensi yang akan dibahas dalam blog ini adalah fan in, dan fan out.

Implementasi Fan In

Fan In adalah adalah pattern concurrency yang mengambil beberapa masukan dan menggunakannya dalam satu channel. Fan In Pattern bekerja seperti multiplexer. Ini dia visualisasi sederhana dari Fan In.

Berikut ini contoh simpel menggunakan channel

output program:

Channel B -> 47
<- 47
Channel B -> 81
<- 81
Channel A -> 25
<- 25
Channel B -> 56
<- 56
Channel B -> 94
<- 94
Channel B -> 62
<- 62
Channel B -> 28
<- 28
Channel B -> 11
<- 11
Channel A -> 37
<- 37
Channel A -> 95
<- 95
Channel B -> 28
<- 28

Berdasarkan kode yang ditampilkan diatas, data akan dimasukkan ke dalam 2 channel yaitu channel A dan channel B. Selanjutnya dicetak dengan channel C yang mana hanya channel C saja yang akan mencetak semua masukkan data dari berbagai channel

Implementasi Fan Out

Fan Out Pattern merupakan concurrency patter dimana banyak fungsi dapat membaca dari channel yang sama hingga channel tersebut ditutup. Biasanya pattern fan in dan fan out dapat digunakan secara bersamaan. Ini dia visualisasi sederhana dari Fan Out.

langsung pada contoh samplenya berikut ini

Output program:

 -> 87
consumer B <- 87
 -> 59
consumer B <- 59
 -> 18
consumer A <- 18
 -> 40
consumer A <- 40
 -> 0
consumer A <- 0

Berdasarkan kode yang dibuat diatas, fan out digunakan untuk multi output yang mana jika terdapat data yang dimasukkan dalam satu channel, maka nantinya akan di proses oleh beberapa channel yang sudah disediakan, dalam kode ini, channel yang memproses adalah channel A dan channel B.

comments powered by Disqus