V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
imgse
V2EX  ›  问与答

单次网络请求耗时,各语言的差距大吗?

  •  
  •   imgse · 2019-04-20 16:02:52 +08:00 · 3258 次点击
    这是一个创建于 2047 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Java golang 等语言比 python 快,但在单次的网络请求上,Java,c/c++,golang 之类的是否还有优势?

    我测试用 python 的 session.get ,一次请求耗时 和用 go 的 http.Get 差不多甚至有时还要快。(网络一样)

    是不是 Java,c/c++,golang 之类的语言,相比 python,单次 get/post,并没有多少优势?

    15 条回复    2019-04-21 01:50:14 +08:00
    AngryPanda
        1
    AngryPanda  
       2019-04-20 16:05:46 +08:00
    请求耗时主要消耗在网络请求自身上面,与语言关系不大。

    请求发起和响应接收肯定有性能差异,但是占比应该很小。
    imgse
        2
    imgse  
    OP
       2019-04-20 16:10:41 +08:00
    @AngryPanda 我用 python 的 requests,比 golang 的 http.Get 要快几十毫秒,这没想到,是因为 golang 的初始化更耗时吗
    isCyan
        3
    isCyan  
       2019-04-20 16:14:49 +08:00 via Android
    @imgse golang 包含编译时间?
    imgse
        4
    imgse  
    OP
       2019-04-20 16:18:30 +08:00
    @isCyan 已经编译好了
    keepeye
        5
    keepeye  
       2019-04-20 16:21:02 +08:00
    你是怎么测的?
    imgse
        6
    imgse  
    OP
       2019-04-20 16:28:27 +08:00
    @keepeye 这是 golang 的,在我这多次测试大概是 150ms,用的是 golang 内置的 time 计算的耗时
    func main() {
    t1 := time.Now()
    for i := 0; i < 1; i++ {
    url := "https://www.baidu.com/"
    http.Get(url)
    }
    t2 := time.Now()
    fmt.Println(t2.Sub(t1))
    }
    keepeye
        7
    keepeye  
       2019-04-20 16:31:26 +08:00
    @imgse 我用 python 和 go 测了没啥区别,都是 25ms 左右
    imgse
        8
    imgse  
    OP
       2019-04-20 16:33:48 +08:00
    @keepeye 我用 python 测试,70ms 左右,不过你那怎么这么快啊,我这测试最快的也才 50ms
    keepeye
        9
    keepeye  
       2019-04-20 16:41:35 +08:00
    @imgse

    [code]
    import requests
    import time

    t = time.time()
    resp = requests.get("http://www.baidu.com")
    t1 = time.time()
    print(t1 - t)
    [/code]

    [code]
    package main

    import (
    "fmt"
    "io/ioutil"
    "net/http"
    "time"
    )

    func main() {
    a := new([]int)
    fmt.Println(a)
    t := time.Now()
    resp, _ := http.Get("http://www.baidu.com")
    defer resp.Body.Close()
    ioutil.ReadAll(resp.Body)
    //fmt.Println(body)
    fmt.Println(time.Now().Sub(t).Nanoseconds() / 1000 / 1000)
    }
    [/code]
    rayhy
        10
    rayhy  
       2019-04-20 16:45:50 +08:00
    @imgse go 哪个版本啊?我之前也遇到过这个问题,仅供参考: https://www.v2ex.com/t/514632
    imgse
        11
    imgse  
    OP
       2019-04-20 16:48:21 +08:00
    @keepeye 看来是我 golang 的写法有问题。
    imgse
        12
    imgse  
    OP
       2019-04-20 16:53:38 +08:00   ❤️ 1
    @keepeye 我说怎么差别这么大呢,原来我用的 https。
    imgse
        13
    imgse  
    OP
       2019-04-20 16:54:14 +08:00
    @rayhy go version go1.12.4 darwin/amd64
    dog
        14
    dog  
       2019-04-21 00:10:46 +08:00 via iPhone
    用 C# 和 PHP 写的请求同一个地址,不严谨的感觉 PHP 慢很多
    imgse
        15
    imgse  
    OP
       2019-04-21 01:50:14 +08:00
    @dog c#和 PHP 没有测试,大概用多少毫秒啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4335 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:02 · PVG 09:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.