--- /dev/null
+
+package worker
+
+import (
+ "fmt"
+ "time"
+ "math/rand"
+ "balancer"
+)
+
+type Runner struct {
+ Requests chan balancer.Requester
+ id balancer.WorkerId
+}
+
+func (w Runner) String() string {
+ return fmt.Sprintf("%v", w.id)
+}
+var _ balancer.WorkRunner = (*Runner)(nil)
+
+func (w *Runner) InitRunner(wid balancer.WorkerId) {
+ w.id = wid
+}
+
+func (w *Runner) Work(id string, done chan<- *balancer.Done) {
+ t := rand.Intn(5)
+ fmt.Printf(" %v [%v]: sleeping for %v secs before begin..\n", w, id, t)
+ time.Sleep(time.Duration(t) * time.Second)
+ timeout := time.After(time.Second)
+ for {
+ select {
+ case req := <- w.Requests:
+ fmt.Printf(" %v [%v]: start computing '%v'\n", w, id, req)
+ req.Send(req.Fn())
+ done <- &balancer.Done{w.id, req}
+ fmt.Printf(" %v [%v]: finished '%v'\n", w, id, req)
+ case <-timeout:
+ fmt.Printf(" %v [%v]: i'm still here..\n", w.id, id)
+ timeout = time.After(time.Second)
+ }
+ }
+}
+
+func (w *Runner) Send(req balancer.Requester) {
+ w.Requests <- req
+}
+
"fmt"
"time"
"math/rand"
- balancer "./balancer_v2"
+ "balancer"
+ "balancer/worker"
)
// FIXME: Add buffers to channels. What changes?
}
}
-
-type workRun struct {
- requests chan balancer.Requester
- id balancer.WorkerId
-}
-
-func (w workRun) String() string {
- return fmt.Sprintf("%v", w.id)
-}
-var _ balancer.WorkRunner = (*workRun)(nil)
-
-func (w *workRun) InitRunner(wid balancer.WorkerId) {
- w.id = wid
-}
-
-func (w *workRun) Work(id string, done chan<- *balancer.Done) {
- t := rand.Intn(5)
- fmt.Printf(" %v [%v]: sleeping for %v secs before begin..\n", w, id, t)
- time.Sleep(time.Duration(t) * time.Second)
- timeout := time.After(time.Second)
- for {
- select {
- case req := <- w.requests:
- fmt.Printf(" %v [%v]: start computing '%v'\n", w, id, req)
- req.Send(req.Fn())
- done <- &balancer.Done{w.id, req}
- fmt.Printf(" %v [%v]: finished '%v'\n", w, id, req)
- case <-timeout:
- fmt.Printf(" %v [%v]: i'm still here..\n", w.id, id)
- timeout = time.After(time.Second)
- }
- }
-}
-
-func (w *workRun) Send(req balancer.Requester) {
- w.requests <- req
-}
-
var nWorker int = 4
func main() {
workers := make([]balancer.WorkRunner, nWorker)
for i := 0; i < nWorker; i++ {
c := make(chan balancer.Requester)
- workers[i] = &workRun{requests: c}
+ workers[i] = &worker.Runner{Requests: c}
}
b := balancer.InitBalancer(workers)
go requester(work)