Rerun tools/build to reformat

This commit is contained in:
Eli Bendersky 2019-05-30 05:40:18 -07:00
parent 95d0dd43cc
commit 3010af04fc
3 changed files with 33 additions and 34 deletions

View File

@ -12,40 +12,40 @@ import "time"
// results on `results`. We'll sleep a second per job to // results on `results`. We'll sleep a second per job to
// simulate an expensive task. // simulate an expensive task.
func worker(id int, jobs <-chan int, results chan<- int) { func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs { for j := range jobs {
fmt.Println("worker", id, "started job", j) fmt.Println("worker", id, "started job", j)
time.Sleep(time.Second) time.Sleep(time.Second)
fmt.Println("worker", id, "finished job", j) fmt.Println("worker", id, "finished job", j)
results <- j * 2 results <- j * 2
} }
} }
func main() { func main() {
// In order to use our pool of workers we need to send // In order to use our pool of workers we need to send
// them work and collect their results. We make 2 // them work and collect their results. We make 2
// channels for this. // channels for this.
jobs := make(chan int, 100) jobs := make(chan int, 100)
results := make(chan int, 100) results := make(chan int, 100)
// This starts up 3 workers, initially blocked // This starts up 3 workers, initially blocked
// because there are no jobs yet. // because there are no jobs yet.
for w := 1; w <= 3; w++ { for w := 1; w <= 3; w++ {
go worker(w, jobs, results) go worker(w, jobs, results)
} }
// Here we send 5 `jobs` and then `close` that // Here we send 5 `jobs` and then `close` that
// channel to indicate that's all the work we have. // channel to indicate that's all the work we have.
for j := 1; j <= 5; j++ { for j := 1; j <= 5; j++ {
jobs <- j jobs <- j
} }
close(jobs) close(jobs)
// Finally we collect all the results of the work. // Finally we collect all the results of the work.
// This also ensures that the worker goroutines have // This also ensures that the worker goroutines have
// finished. An alternative way to wait for multiple // finished. An alternative way to wait for multiple
// goroutines is to use a [WaitGroup](waitgroup). // goroutines is to use a [WaitGroup](waitgroup).
for a := 1; a <= 5; a++ { for a := 1; a <= 5; a++ {
<-results <-results
} }
} }

View File

@ -1,2 +1,2 @@
bfd2824b3840ff67fa9a0218c7be66647b4bf3d9 3f7712d470dcbfc0cdddc939bb80814baaff8bb0
IQestAFcxLh Q5r-XtrWWL-

View File

@ -40,7 +40,7 @@ a <em>worker pool</em> using goroutines and channels.</p>
</td> </td>
<td class="code leading"> <td class="code leading">
<a href="http://play.golang.org/p/IQestAFcxLh"><img title="Run code" src="play.png" class="run" /></a> <a href="http://play.golang.org/p/Q5r-XtrWWL-"><img title="Run code" src="play.png" class="run" /></a>
<div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span> <div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span>
</pre></div> </pre></div>
@ -150,8 +150,7 @@ channel to indicate that&rsquo;s all the work we have.</p>
<p>Finally we collect all the results of the work. <p>Finally we collect all the results of the work.
This also ensures that the worker goroutines have This also ensures that the worker goroutines have
finished. An alternative way to wait for multiple finished. An alternative way to wait for multiple
goroutines that&rsquo;s useful in many scenarios is goroutines is to use a <a href="waitgroup">WaitGroup</a>.</p>
to use a <a href="waitgroup">WaitGroup</a>.</p>
</td> </td>
<td class="code"> <td class="code">