mirror of
https://github.com/golang/go
synced 2024-11-22 07:14:40 -07:00
simplify threadring slightly; slight speed improvement
R=rsc DELTA=7 (3 added, 3 deleted, 1 changed) OCL=32885 CL=32889
This commit is contained in:
parent
aa7bd48389
commit
5005fb46a2
@ -39,7 +39,6 @@ import (
|
||||
"flag";
|
||||
"fmt";
|
||||
"os";
|
||||
"time";
|
||||
)
|
||||
|
||||
var n = flag.Int("n", 1000, "how many passes")
|
||||
@ -58,17 +57,15 @@ func f(i int, in <-chan int, out chan<- int) {
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse();
|
||||
flag.Parse();
|
||||
|
||||
one := make(chan int); // will be input to thread 1
|
||||
var in, out chan int = nil, one;
|
||||
for i := 1; i <= Nthread-1; i++ {
|
||||
for i := 1; i <= Nthread-1; i++ {
|
||||
in, out = out, make(chan int);
|
||||
go f(i, in, out);
|
||||
go f(i, in, out);
|
||||
}
|
||||
go f(Nthread, out, one);
|
||||
one <- *n;
|
||||
for {
|
||||
time.Sleep(100*1e9); // wait for ring to run
|
||||
}
|
||||
<-make(chan int); // hang until ring completes
|
||||
}
|
||||
|
@ -120,3 +120,6 @@ threadring 50000000
|
||||
gccgo -O2 threadring.go 90.33u 459.95s 448.03r
|
||||
gc threadring 33.11u 0.00s 33.14r
|
||||
GOMAXPROCS=4 gc threadring 114.48u 226.65s 371.59r
|
||||
# change wait code to do <-make(chan int) instead of time.Sleep
|
||||
gc threadring 28.41u 0.01s 29.35r
|
||||
GOMAXPROCS=4 gc threadring 112.59u 232.83s 384.72r
|
||||
|
Loading…
Reference in New Issue
Block a user