此代码的目的是使用go例程计算我的计算机和google.com之间的每个连接时间。但结果似乎是错误的。为什么时间不断增加。这是怎么回事?
2013/12/04 16:10:41 www.google.com 597.175072ms
2013/12/04 16:10:41 www.google.com 608.161898ms
2013/12/04 16:10:41 www.google.com 614.527441ms
2013/12/04 16:10:41 www.google.com 620.51907ms
2013/12/04 16:10:41 www.google.com 630.052257ms
2013/12/04 16:10:42 www.google.com 654.539717ms
2013/12/04 16:10:42 www.google.com 659.144724ms
2013/12/04 16:10:42 www.google.com 1.282230659s
2013/12/04 16:10:42 www.google.com 1.353469764s
package main
import (
"log"
"net"
"net/http"
"time"
"sync"
)
var wg sync.WaitGroup
func main() {
url := "http://www.google.com"
for i := 0; i < 9; i++ {
wg.Add(1)
go request(url)
}
wg.Wait()
}
func dialTimeout(network, addr string) (net.Conn, error) {
return net.DialTimeout(network, addr, time.Duration(1*time.Second))
}
func request(url string) {
var t0, t1 time.Time
transport := http.Transport{
Dial: dialTimeout,
}
client := http.Client{
Transport: &transport,
}
t0 = time.Now()
_, err := client.Get(url)
t1 = time.Now()
if err != nil {
log.Println(err)
}
log.Println(url +" "+ t1.Sub(t0).String())
wg.Done()
}
答案 0 :(得分:3)
也许这就是解释:您的代码是一种聪明的方法,可以排序从最快到最慢的10个连接时间。每个goroutine在完成后打印所需的时间,因此稍后打印更长的连接。因为所有人都在同一时刻开始看到“增加连接时间”,但没有任何增加,最慢的只是缓慢而且最后打印。