mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-24 06:28:13 +01:00
49 lines
750 B
Go
49 lines
750 B
Go
package app
|
|
|
|
type Collector struct {
|
|
Job chan Job
|
|
end chan bool
|
|
}
|
|
|
|
var workerChannel = make(chan chan Job)
|
|
|
|
func (di *Diun) StartDispatcher(workerCount int) Collector {
|
|
var i int
|
|
var workers []worker
|
|
input := make(chan Job)
|
|
end := make(chan bool)
|
|
collector := Collector{
|
|
Job: input,
|
|
end: end,
|
|
}
|
|
|
|
for i < workerCount {
|
|
i++
|
|
worker := worker{
|
|
diun: di,
|
|
workerPool: workerChannel,
|
|
jobChannel: make(chan Job),
|
|
end: make(chan bool),
|
|
}
|
|
worker.Start()
|
|
workers = append(workers, worker)
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-end:
|
|
for _, w := range workers {
|
|
w.Stop()
|
|
}
|
|
return
|
|
case work := <-input:
|
|
worker := <-workerChannel
|
|
worker <- work
|
|
}
|
|
}
|
|
}()
|
|
|
|
return collector
|
|
}
|