From: sgf Date: Tue, 1 Nov 2022 15:40:23 +0000 (+0300) Subject: chg(balancer): Move balancer-v2 and worker to separate packages. X-Git-Url: https://gitweb.sgf-dma.tk/?a=commitdiff_plain;h=8e914b6a27bb51ff48e6be524d4d0668191b3e46;p=go.git chg(balancer): Move balancer-v2 and worker to separate packages. --- diff --git a/concurrency-is-not-parallelism/balancer_v2/.gitignore b/concurrency-is-not-parallelism/balancer_v2/.gitignore new file mode 100644 index 0000000..863e124 --- /dev/null +++ b/concurrency-is-not-parallelism/balancer_v2/.gitignore @@ -0,0 +1 @@ +balancer_v2 diff --git a/concurrency-is-not-parallelism/balancer_v2/balancer.go b/concurrency-is-not-parallelism/balancer_v2/balancer/balancer.go similarity index 99% rename from concurrency-is-not-parallelism/balancer_v2/balancer.go rename to concurrency-is-not-parallelism/balancer_v2/balancer/balancer.go index c62989c..a1bacda 100644 --- a/concurrency-is-not-parallelism/balancer_v2/balancer.go +++ b/concurrency-is-not-parallelism/balancer_v2/balancer/balancer.go @@ -1,5 +1,5 @@ // Balancer v2 with requester and work runner interfaces. -package balancer_v2 +package balancer import ( "fmt" diff --git a/concurrency-is-not-parallelism/balancer_v2/balancer/go.mod b/concurrency-is-not-parallelism/balancer_v2/balancer/go.mod new file mode 100644 index 0000000..30a2fa7 --- /dev/null +++ b/concurrency-is-not-parallelism/balancer_v2/balancer/go.mod @@ -0,0 +1,3 @@ +module balancer + +go 1.15 diff --git a/concurrency-is-not-parallelism/balancer_v2/balancer/worker/go.mod b/concurrency-is-not-parallelism/balancer_v2/balancer/worker/go.mod new file mode 100644 index 0000000..3b84b83 --- /dev/null +++ b/concurrency-is-not-parallelism/balancer_v2/balancer/worker/go.mod @@ -0,0 +1,7 @@ +module balancer/worker + +go 1.15 + +replace balancer => ../../balancer + +require balancer v0.0.0-00010101000000-000000000000 diff --git a/concurrency-is-not-parallelism/balancer_v2/balancer/worker/worker.go b/concurrency-is-not-parallelism/balancer_v2/balancer/worker/worker.go new file mode 100644 index 0000000..e79bfbd --- /dev/null +++ b/concurrency-is-not-parallelism/balancer_v2/balancer/worker/worker.go @@ -0,0 +1,47 @@ + +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 +} + diff --git a/concurrency-is-not-parallelism/balancer_v2.go b/concurrency-is-not-parallelism/balancer_v2/balancer_v2.go similarity index 60% rename from concurrency-is-not-parallelism/balancer_v2.go rename to concurrency-is-not-parallelism/balancer_v2/balancer_v2.go index d341899..a2f3ecd 100644 --- a/concurrency-is-not-parallelism/balancer_v2.go +++ b/concurrency-is-not-parallelism/balancer_v2/balancer_v2.go @@ -5,7 +5,8 @@ import ( "fmt" "time" "math/rand" - balancer "./balancer_v2" + "balancer" + "balancer/worker" ) // FIXME: Add buffers to channels. What changes? @@ -54,44 +55,6 @@ func requester(work chan<- balancer.Requester) { } } - -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() { @@ -100,7 +63,7 @@ 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) diff --git a/concurrency-is-not-parallelism/balancer_v2/go.mod b/concurrency-is-not-parallelism/balancer_v2/go.mod index e35bd31..9a4e6e1 100644 --- a/concurrency-is-not-parallelism/balancer_v2/go.mod +++ b/concurrency-is-not-parallelism/balancer_v2/go.mod @@ -1,3 +1,12 @@ module balancer_v2 go 1.15 + +replace balancer => ./balancer + +replace balancer/worker => ./balancer/worker + +require ( + balancer v0.0.0-00010101000000-000000000000 + balancer/worker v0.0.0-00010101000000-000000000000 +)