mirror of
https://github.com/crazybber/awesome-patterns.git
synced 2025-02-18 06:33:13 +03:00
added example to worker
This commit is contained in:
parent
c82050f197
commit
e2c47bd910
@ -10,7 +10,11 @@ package main
|
|||||||
// when it can’t accept any more work because it’s busy. No work is ever lost or stuck in a
|
// when it can’t accept any more work because it’s busy. No work is ever lost or stuck in a
|
||||||
// queue that has no guarantee it will ever be worked on.
|
// queue that has no guarantee it will ever be worked on.
|
||||||
|
|
||||||
import "sync"
|
import (
|
||||||
|
"log"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// Worker must be implemented by types that want to use
|
// Worker must be implemented by types that want to use
|
||||||
// the work pool.
|
// the work pool.
|
||||||
@ -69,3 +73,50 @@ func (p *Pool) Shutdown() {
|
|||||||
close(p.work)
|
close(p.work)
|
||||||
p.wg.Wait()
|
p.wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var names = []string{
|
||||||
|
"steve",
|
||||||
|
"bob",
|
||||||
|
"mary",
|
||||||
|
"therese",
|
||||||
|
"jason",
|
||||||
|
}
|
||||||
|
|
||||||
|
// namePrinter provides special support for printing names.
|
||||||
|
type namePrinter struct {
|
||||||
|
name string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Task implements the Worker interface.
|
||||||
|
func (m *namePrinter) Task() {
|
||||||
|
log.Println(m.name)
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
|
// main is the entry point for all Go programs.
|
||||||
|
func main() {
|
||||||
|
// Create a work pool with 2 goroutines.
|
||||||
|
p := New(2)
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(100 * len(names))
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
// Iterate over the slice of names.
|
||||||
|
for _, name := range names {
|
||||||
|
// Create a namePrinter and provide the
|
||||||
|
// specific name.
|
||||||
|
np := namePrinter{
|
||||||
|
name: name,
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
// Submit the task to be worked on. When RunTask
|
||||||
|
// returns we know it is being handled.
|
||||||
|
p.Run(&np)
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
// Shutdown the work pool and wait for all existing work
|
||||||
|
// to be completed.
|
||||||
|
p.Shutdown()
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user