A go package to break down a slice into chunk of indexes to help implementing chunk based concurrency.
Chunk based concurreny may be less verbose than the usual channel/worker concurrency pattern, albeit having the disadvantage of synchronuously waiting for every batch/chunk to complete, and recreating one goroutine per item.
package main
import (
"github.com/QuentinFAIDIDE/go-chunk-concurrency/gochunks"
)
numbersToHalves := []int{4, 10, 30, 200, 3090}
halvedNumbers := make([]int, 5)
concurrentIdsChunks := gochunks.MakeConcurrencyChunks(5, 2)
// iterate over chunks with their own waitgroup synchronously
for _, cChunk := range concurrentIdsChunks {
var wg sync.WaitGroup
wg.Add(len(cChunk))
// for each chunk conrrent task pop a worker and perform task
for _, taskId := range cChunk {
go func(i int) {
halvedNumbers[i] = numbersToHalves[i] >> 1
wg.Done()
}(taskId)
}
wg.Wait()
}
fmt.Println(halvedNumbers)
// Output: {2, 5, 15, 100, 1545}