Goroutine dan scheduler
Bagaimana Go menjadwalkan pekerjaan concurrent — dan kenapa Anda hampir tak perlu lagi mengatur GOMAXPROCS.
Daftar Isi
Kalau Anda cukup lama menulis Go, “tambahkan saja goroutine” jadi refleks. Memahami apa yang terjadi setelahnya adalah pembeda kode menengah dari pemula.
Modelnya dalam satu paragraf
Goroutine adalah task ringan yang di-switch melalui stack. Runtime memultiplexnya ke thread OS (M) lewat processor (P). Saat goroutine block di I/O, runtime memarkirnya dan memakai ulang thread-nya — tidak ada pemborosan thread-per-request.
Memulai pekerjaan
results := make(chan int, 3)
for i := 1; i <= 3; i++ {
go func(n int) {
results <- n * n
}(i)
}
sum := 0
for i := 0; i < 3; i++ {
sum += <-results
}
Kapan perlu peduli
- Default
GOMAXPROCSmengikuti jumlah core; override hanya dengan alasan terukur - Buffer terbatas (
chan T, n) adalah alat backpressure Anda - Kalau Anda tak bisa menjelaskan siapa yang menutup sebuah channel, desain ulang
Bagian 2 melanjutkan dengan context dan pembatalan — separuh lain dari concurrency produksi.