常规时间

时间:2013-12-04 08:37:17

标签: go goroutine

此代码的目的是使用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()
}

1 个答案:

答案 0 :(得分:3)

也许这就是解释:您的代码是一种聪明的方法,可以排序从最快到最慢的10个连接时间。每个goroutine在完成后打印所需的时间,因此稍后打印更长的连接。因为所有人都在同一时刻开始看到“增加连接时间”,但没有任何增加,最慢的只是缓慢而且最后打印。

http://play.golang.org/p/MzgELyNh8B显示效果。