繁体   English   中英

常规时间

[英]go routine with time duration

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

也许这就是解释:您的代码是一种巧妙的方法, 可以将10个连接时间从最快到最慢排序 每个goroutine在完成后打印所需的时间,因此稍后打印更长的连接。 由于所有都基本上在同一时刻开始你看到“增加连接时间”但没有增加,最慢的只是缓慢和最后打印。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM