Belajar Golang #26 : Menggunakan Buffered Channel

Tutorial Golang yang membahas mengenai channel yang berjenis channel buffered. Kita akan belajar golang dengan membuat channel buffered di sertai contoh kode program GO.

Sebelumnya kita sudah bahas banyak mengenai channel yaitu pada tutorial golang sebelumnya. Jika anda belum mengerti mengenai channel di golang bisa kembali ke tutorial golang sebelumnya yaitu Belajar Golang #25 : Memahami penggunaan Channel.

Secara default, channel di golang di lakukan dengan un-buffered. Dimana terdapat pengirim dan penerima melalui channel bersifat blocking. Dimana harus pengiriman data satu per satu kepada goroutine.

Banyak yang menanyakan yang berjalan bersamaan itu sebenarnya channel apa gorotuine ?

Saya akan bahas di sini, Goroutine dapat berjalan secara bersamaan (asynchronous), artinya kita dapat menjalankan lebih satu satu gorotuine. Sedangkan Channel istilah nya bukan asynchronous lagi melainkan blocking dan non blocking. Non Blocking artinya isi dari channel dapat di kirim secara bersamaan, nah ini lah yang di sebut buffered channel.

Perbedaan Channel Buffered dengan Unbuferred

Seperti yang saya jelaskan di awal bahwa channel secara default di lakukan secara unbufferd, artinya hanya data yang di kirim satu per satu melalui channel. Sedangkan dengan channel buffer kita dapat melakukan pengiriman data lebih daru satu.

Baca Juga :

unbuffered bukan hanya pengirim saja yang di block, melainkan penerimanya juga di block ketika data sebelumnya belum selesai.

Nah dengan menggunakan channel buffer ini memungkinkan kita mengirim dan menerima banyak permintaan.

Latihan Membuat Channel Buffer

Untuk membuat channel buffer harus menentukan jumlah kapasitas data yang bisa di lakukan secara bersamaan dengan format :

Perhitungan kapasitas channel seperti array yaitu di mulai dari 0. Ketika kita mengisi nilai buffer yaitu 2 maka akan ada proses yang dapat di lakukan bersamaan sejumlah 2. Namun akan lebih baik ketika kita memberikan kapasitas nilai buffer sama dengan jumlah data yang ingin di kirim.

Mari kita buat contoh penggunaan channel buffered yang sederhana.

main.go

Hasilnya :

Belajar Golang #26 : Menggunakan Buffered Channel
Latihan Membuat Channel Buffer di Golang

Perhatikan kode go di atas, terdapat deklarasi channel buffer dengan kapasitas 3. Setelah itu variable channel di isi dengan 3 kali data. Maka Proses yang terdapat pada fungsi utama untuk melakukan cetak data tidak di block, artinya berjalan secara bersamaan.

Mari kita latihan lagi dengan kode yang lebih bervariasi.

Contoh Penggunaan Buffer Channel

Mari kita buat contoh kode lagi, contoh kedua ini akan menggunakan goroutine untuk mengirim data via channel.

main.go

Hasilnya :

Belajar Golang #26 : Menggunakan Buffered Channel
Contoh Penggunaan Buffer Channel di Golang

Perhatikan kode diatas, terdapat goroutine dengan nama fungsi tulis(), fungsi ini digunakan untuk mengirim data via channel. Data yang di kirim mempunya kapasitas sesuai dengan panjang slice.

Selanjutnya fungsi main(), memanggil fungsi cetak() untuk menampilkan nilai dari data yang di kirim via channel.

Maka data slice yang di tampilkan akan di tampilkan secara bersamaan tanpa harus menunggu pengirimm sebelumnya selesai dulu.

Apabila anda ingin melakukan penundaan terhadap goroutine bisa menambahkan waktu menunda dengan sintaks :

Contohnya :

Jika menambahkan kode di atas yaitu time.Sleep(2 * time.Second), artinya hasil pencetakan penerima data bersifat blocking. Namun dalam pengiriman data bersifat non blocking. Sebenarnya yang di block bukanlah channel melainkan goroutine nya.

Sekian artikel yang membahas tentant channel buffered di bahasa program Golang. Semoga Bermanfaat.

Leave a Reply