workers/workers.go
2023-12-24 04:20:25 +01:00

35 lines
659 B
Go

package workers
import "sync"
// Channel launches n workers to perform an action for every item in the input channel
func Channel[T any](n int, ch chan T, handler func(T)) {
var wg sync.WaitGroup
wg.Add(n)
for i := 0; i < n; i++ {
go func() {
for item := range ch {
handler(item)
}
wg.Done()
}()
}
wg.Wait()
}
// Array launches n workers to perform an action for every item in the input array
func Array[T any](n int, arr []T, handler func(T)) {
var wg sync.WaitGroup
wg.Add(n)
for i := 0; i < n; i++ {
go func(i int) {
for j := 0; (j*n)+i < len(arr); j++ {
handler(arr[(j*n)+i])
}
wg.Done()
}(i)
}
wg.Wait()
}