Skip to content

Instantly share code, notes, and snippets.

@mikewadhera
Created December 18, 2011 03:40
Show Gist options
  • Save mikewadhera/1492294 to your computer and use it in GitHub Desktop.
Save mikewadhera/1492294 to your computer and use it in GitHub Desktop.
example of master/worker pattern in Go (http://go-lang.org)
~/code/go/master-worker % ./master-worker
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
Sat Dec 17 19:43:08 PST 2011
package main
import (
"fmt"
"time"
)
type Work struct {
Fn func()
Completed bool
}
func NewWork(fn func()) *Work {
return &Work{fn, false}
}
func Worker(in chan *Work, out chan *Work) {
for {
t := <-in
t.Fn()
t.Completed = true
out <- t
}
}
func MasterRun(fn func(), jobs int, concurrency int) {
pending := make(chan *Work)
done := make(chan *Work)
go func() {
for i := 0; i < jobs; i++ {
pending <- NewWork(fn)
}
}()
for i := 0; i < concurrency; i++ {
go Worker(pending, done)
}
for i := 0; i < jobs; i++ {
<-done
}
}
func main() {
printTime := func() {
now := time.LocalTime()
fmt.Println(now.String())
}
MasterRun(printTime, 100, 10)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment