Semaphore
Contoh Dasar Implementasi Semaphore di Golang
package main
import (
"fmt"
"sync"
"time"
)
func main() {
const maxConcurrentJobs = 3 // Batas maksimal goroutine yang boleh berjalan
semaphore := make(chan struct{}, maxConcurrentJobs)
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
// Mengisi slot semaphore sebelum memulai pekerjaan
semaphore <- struct{}{}
go func(jobID int) {
defer wg.Done()
defer func() { <-semaphore }() // Melepaskan slot semaphore setelah selesai
fmt.Printf("Processing job %d\n", jobID)
time.Sleep(2 * time.Second) // Simulasi pekerjaan
}(i)
}
wg.Wait()
fmt.Println("All jobs completed")
}Implementasi Middleware Semaphore untuk gRPC
Implementasi Middleware Semaphore untuk REST API (HTTP)
Kesimpulan
Last updated