From 8fb0537131ba6f20e9dcbc7db065efb37f1cd31d Mon Sep 17 00:00:00 2001 From: Noval Agung Prayogo Date: Sun, 15 Oct 2023 18:12:16 +0700 Subject: [PATCH] fix: buffered channel example (#239) * fix: buffered channel example * fix: indentation * fix: accidental update --- content/A-buffered-channel.md | 18 ++++++++++++++++-- content/B-simple-configuration.md | 5 ++++- examples | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/content/A-buffered-channel.md b/content/A-buffered-channel.md index 7b857cebb..cdac3e3dd 100644 --- a/content/A-buffered-channel.md +++ b/content/A-buffered-channel.md @@ -19,8 +19,11 @@ Berikut adalah contoh penerapan buffered channel. Program di bawah ini merupakan ```go package main -import "fmt" -import "runtime" +import ( + "fmt" + "runtime" + "time" +) func main() { runtime.GOMAXPROCS(2) @@ -38,7 +41,10 @@ func main() { fmt.Println("send data", i) messages <- i } + + time.Sleep(1 * time.Second) } + ``` Pada kode di atas, parameter kedua fungsi `make()` adalah representasi jumlah buffer. Perlu diperhatikan bahwa nilai buffered channel dimulai dari `0`. Ketika nilainya adalah **3** berarti jumlah buffer maksimal ada **4**. @@ -51,6 +57,14 @@ Bisa dilihat output di atas, pada proses pengiriman data ke-4, diikuti dengan pr Pengiriman data indeks ke 0, 1, 2 dan 3 akan berjalan secara asynchronous, hal ini karena channel ditentukan nilai buffer-nya sebanyak 3 (ingat, jika nilai buffer adalah 3, maka 4 data yang akan di-buffer). Pengiriman selanjutnya (indeks 5) hanya akan terjadi jika ada salah satu data dari ke-empat data yang sebelumnya telah dikirimkan sudah diterima (dengan serah terima data yang bersifat blocking). Setelahnya, pengiriman data kembali dilakukan secara asynchronous (karena sudah ada slot buffer ada yang kosong). +Karena pengiriman dan penerimaan data via buffered channel terjadi tidak selalu sycnrhonous (tergantung jumlah buffer-nya), maka ada kemungkinan dimana eksekusi program selesai namun tidak semua data diterima via channel `messages`. Karena alasan ini pada bagian akhir ditambahkan statement `time.Sleep(1 * time.Second)` agar ada jeda 1 detik sebelum program selesai. + +#### • Fungsi `time.Sleep()` + +Fungsi ini digunakan untuk menambahkan delay sebelum statement berikutnya dieksekusi. Durasi delay ditentukan oleh parameter, misal `1 * time.Second` maka durasi delay adalah 1 detik. + +Lebih detailnya mengenai fungsi `time.Sleep()` dan `time.Second` dibahas pada chapter terpisah, yaitu [Time Duration](https://dasarpemrogramangolang.novalagung.com/A-time-duration.html). + ---