package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int, 4)

	// produsen: mengisi buffer tanpa menunggu konsumen
	go func() {
		for i := 1; i <= 4; i++ {
			time.Sleep(20 * time.Millisecond) // simulasi produksi
			ch <- i
		}
		close(ch)
	}()

	// konsumen: main mengosongkan buffer sambil bekerja
	for v := range ch {
		time.Sleep(10 * time.Millisecond) // simulasi pemrosesan
		fmt.Println("konsumen menerima:", v)
	}

	fmt.Println("selesai")
}
