return fmt.Sprintf("R %.2d", r.num)
}
-func workFn(r Request) int {
+func workFn(r *Request) int {
fmt.Printf("%v: computing (workFn).. (%p)\n", r, r.fn)
return r.num
}
-func furtherProcess(r Request, result int) {
+func furtherProcess(r *Request, result int) {
fmt.Printf("%v: further processing result %v..\n", r, result)
}
time.Sleep(time.Duration(t) * time.Second)
req := &Request{num: reqNum, c: c}
- fn := func () int { return workFn(*req) }
+ fn := func () int { return workFn(req) }
req.fn = fn
fmt.Printf("requester() '%v': sending\n", req)
work <- *req
result := <-c
fmt.Printf("requester() '%v': received result %v\n", req, result)
- furtherProcess(*req, result)
+ furtherProcess(req, result)
reqNum++
}
}
type Done struct {
w *Worker
- r Request
+ r *Request
}
func (w Worker) String() string {
req := <- w.requests
fmt.Printf("%v: start computing '%v'\n", w, req)
req.c <- req.fn()
- done <- &Done{w, req}
+ done <- &Done{w, &req}
fmt.Printf("%v: finished '%v'\n", w, req)
}
}
}
func (b *Balancer) completed(done *Done) {
- done.w.pending--
fmt.Printf("completed() '%v': finished '%v'\n", done.w, done.r)
+ done.w.pending--
heap.Remove(&b.pool, done.w.index)
heap.Push(&b.pool, done.w)
}