V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
specture
V2EX  ›  Go 编程语言

求推荐个 demo 展示 go 相较于 Python 性能优势的

  •  
  •   specture · 2020-11-17 09:20:51 +08:00 · 6956 次点击
    这是一个创建于 1471 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想在部门推广 golang,ppt 之前想通过一个 demo 演示展示 go 相较于 python 等性能方面的优势。求推荐一个 demo 或者场景,用 go 实现能明显更快的。

    73 条回复    2020-11-23 17:22:15 +08:00
    iConnect
        1
    iConnect  
       2020-11-17 09:25:47 +08:00 via Android
    fastapi
    guonaihong
        2
    guonaihong  
       2020-11-17 09:26:09 +08:00
    使用 wrk 压测下 http 框架的性能就可以了。
    go 使用 net/http,也可以用 fasthttp,性能接近 rust 。
    python 你选下。
    xingshu1990
        3
    xingshu1990  
       2020-11-17 09:27:43 +08:00
    得看公司是用 python 解决什么东西,然后找这些案例针对性的去对比。
    给一个天马行空的举例,没什么用。
    araraloren
        4
    araraloren  
       2020-11-17 09:28:32 +08:00   ❤️ 22
    让 python 多 sleep 几秒。。
    zarte
        5
    zarte  
       2020-11-17 09:31:34 +08:00
    弄个正则匹配 py 就可以
    b00tyhunt3r
        6
    b00tyhunt3r  
       2020-11-17 09:32:03 +08:00 via iPhone
    go 现在 GC peak 优化的怎样了?看 discord 的 blog 感觉和 rust 差不是一星半点
    ericls
        7
    ericls  
       2020-11-17 09:37:48 +08:00
    CPU heavy 的基本上都可以
    specture
        8
    specture  
    OP
       2020-11-17 09:43:53 +08:00
    @xingshu1990 web,还有后台流处理一些中间环节的计算(日志格式转换,正则匹配,多模等等)
    specture
        9
    specture  
    OP
       2020-11-17 09:44:39 +08:00
    @zarte 正则之前测试过,正好也用到了,当时测试结果不太理想,go 比 python 用 threading 没快多少,不知道问题在哪
    specture
        10
    specture  
    OP
       2020-11-17 09:46:23 +08:00   ❤️ 3
    @araraloren 有点不讲武德嗷
    zarte
        11
    zarte  
       2020-11-17 09:48:37 +08:00
    @specture 不是比线程,单纯的匹配一千个就 ok
    tikazyq
        12
    tikazyq  
       2020-11-17 10:01:24 +08:00   ❤️ 1
    https://gist.github.com/tikazyq/e596f9c7b214b4f0b368570ed4ee21a0

    遍历 100000000 次
    go: 0.058280 seconds
    py: 3.965864 seconds

    go 只消耗 1/68 倍 py 的运行时间

    孰优孰劣,一目了然
    seanseek
        13
    seanseek  
       2020-11-17 10:05:14 +08:00   ❤️ 2
    一个编译型一个解释性,不讲武德。。。
    feiandxs
        14
    feiandxs  
       2020-11-17 10:20:09 +08:00   ❤️ 2
    这是为了用个锤子找钉子啊。

    正常逻辑不应该是,公司有某个业务用 Python 跑的,现在出现性能瓶颈,非 Go 不能解决。然后你来做一部分实现做对比,这个例子都不用别人帮你找,是你自己在业务中发现的。这样既有说服力,也是为了解决实际问题。

    你现在是听说不少情况下 Go 跑的比 Python 快,然后你就要找个例子来强行证明比对一下。

    那是不是公司业务中没有的部分你也生造个出来然后吊打一番?

    我司现在就是 Python 和 Golang 混写。且我定下来的技术方向是赶速度的业务用 Python 写,但逐渐往 Golang 迁移。一些非对外提供接口服务的部分就仍然 Python 写下去,同时没事研究研究 Golang 社区这边有什么新东西,可以做个储备用。至于推广,我才不会为了性能来推广 Golang 呢,那写起来速度哪有 Python 快。我会在需要的时候该用就用。
    labulaka521
        15
    labulaka521  
       2020-11-17 10:20:36 +08:00
    这俩个比,年轻人你不讲五德,希望你耗子尾汁
    specture
        16
    specture  
    OP
       2020-11-17 10:20:42 +08:00
    @tikazyq 感谢,简单明了!
    dhssingle
        17
    dhssingle  
       2020-11-17 10:20:56 +08:00
    Go 说实话不就 Java/C# 的性能,甚至还不如,为啥这么多人吹。
    simenet
        18
    simenet  
       2020-11-17 10:21:10 +08:00
    Python: 年轻人 耗子尾汁
    specture
        19
    specture  
    OP
       2020-11-17 10:24:59 +08:00
    @feiandxs 兄弟别激动哦,其实公司业务部分现在我就有论证 go 的性能。我现在想要的如帖子说的,就是 ppt 开始之前一个热场的 demo 。目的单纯为了吸引注意不让分享变得枯燥,而不是因为这个 demo 就让大家把所有业务切换到 go 。

    python 写起来是快,但是维护性真的不太行,性能只是一方面。不同的产品考虑点也不一样,我们团队的产品是企业级产品,对安全性,稳定性要求很高,之前也是出于快速 MVP 用来 python,但是对于我们产品长期来说 python 是要逐步退化为胶水语言,脚本语言来使用的
    xingshu1990
        20
    xingshu1990  
       2020-11-17 10:27:44 +08:00
    给一个选择:编写 2-3 天,跑一个小时就结束;编写 1-2 小时,跑一天就结束。
    不清楚 go 的具体编写难度,所以用上面这个比较夸大的比喻来描述两个语言的情况。
    楼主弄懂上面这个比喻就好了。
    tabris17
        21
    tabris17  
       2020-11-17 10:30:48 +08:00   ❤️ 2
    与其展示 go 的性能优势,不如展示 go 的开发效率优势。毕竟性能差叫运维堆服务器就可以了。开发效率才是码农关心的
    specture
        22
    specture  
    OP
       2020-11-17 10:32:59 +08:00
    @tabris17 关心的是整个开发生命周期的效率,而不是写代码的效率。实际上我们团队或者说大多数团队,写代码只是整个活动中的一小部分
    richzhu
        23
    richzhu  
       2020-11-17 10:34:05 +08:00
    go 比 python 快的场景,是不是不太好遇到啊。。。 还是拼一拼开发速度和可维护性吧
    MoYi123
        24
    MoYi123  
       2020-11-17 10:34:25 +08:00   ❤️ 1
    @tikazyq 你这 python 代码多用了这么多内存,公平吗?
    debuggerx
        25
    debuggerx  
       2020-11-17 10:34:57 +08:00
    tabris17
        26
    tabris17  
       2020-11-17 10:41:43 +08:00   ❤️ 1
    @specture #19 那还不如上 JAVA,真的
    ytymf
        27
    ytymf  
       2020-11-17 10:51:19 +08:00
    真正的瓶颈难道不是业务代码里那段稀烂的 select xxx from xxx 么
    tikazyq
        28
    tikazyq  
       2020-11-17 10:53:42 +08:00
    @MoYi123 改一改不用内存差距很很大,根本不是一个数量级的
    blless
        29
    blless  
       2020-11-17 10:59:23 +08:00 via Android
    @tabris17 java 或者其他语言什么代码规范,工具链都是开源社区贡献的,什么测试用例框架,格式化,lint,vet 就一大堆,更不用说还有什么 profile,benchmark,debug 乱七八糟的整个软件工程一套下来远远没有 go 官方一套来得省事方便
    luzemin
        30
    luzemin  
       2020-11-17 11:00:02 +08:00
    python 最擅长就是爬虫么,就比这个。

    1. 关掉一切代理
    2. python 抓 google,go 抓 baidu
    3. run
    4. 得出结论

    (这很讲武德了吧
    jjshare
        31
    jjshare  
       2020-11-17 11:09:07 +08:00   ❤️ 1
    @specture 兄弟,看你说的,你不适合做技术领导啊。你们团队的产品是企业级产品,对安全性,稳定性要求很高。那你为啥还选用 go 呢,Java 在安全性、稳定性上都比 go 强啊,go 连性能也不比 Java 强,技术人员的招聘、储备上也更安全,为啥你就选择 go 呢
    tabris17
        32
    tabris17  
       2020-11-17 11:13:42 +08:00
    @blless 配套工具仅仅在于你自己的选择,除非你有选择困难症,否则真不算个事儿(前端除外)
    jsion
        33
    jsion  
       2020-11-17 11:15:16 +08:00
    根本不用比好吧,而且 go 也并不是在高级语言中性能最强的,甚至有些还比不上 Java,python 也可以用 native+vm 方式(如 Cython )来提升性能敏感模块的处理速度,混合用不就完了
    gimp
        34
    gimp  
       2020-11-17 11:20:31 +08:00   ❤️ 2
    用 Rust 跑了一下上边的循环,不讲武德,哈哈

    time cost: 0 ms
    jsion
        35
    jsion  
       2020-11-17 11:22:01 +08:00   ❤️ 2
    liangch
        36
    liangch  
       2020-11-17 11:24:18 +08:00
    人家编译的,这点快有啥用。
    看生态吧,你不见得每个轮子都自己写一个。
    polaa
        37
    polaa  
       2020-11-17 11:43:53 +08:00
    @specture 对安全要求高 那么建议 RUST
    Jirajine
        38
    Jirajine  
       2020-11-17 11:47:23 +08:00 via Android
    @tikazyq 你这样比太扯淡了,根本不等价。
    vision1900
        39
    vision1900  
       2020-11-17 11:48:06 +08:00
    2014 年苹果发布会,Chris Lattner 展示了 Swift 语言是如何碾压 python 的
    他挑的都是些对 python 很不利的 task,我记着其中一个 task 是上百倍的性能优势
    learningman
        40
    learningman  
       2020-11-17 11:50:00 +08:00
    求 pai 呗。。。我们上次在群里聊天聊性能差异,现写了几个 demo,纯暴力 C++比 Python 快 7 位数
    specture
        41
    specture  
    OP
       2020-11-17 11:50:02 +08:00
    @jjshare 欢迎讨论,但是这么带帽子不欢迎。java 我用了 5,6 年了,当然明白 java 的优势。但是每种语言都有其擅长区域,你不了解我们的业务怎么判断出我选型考虑 go 是错误的呢?这么武断判断的人适合做技术领导? 为啥考虑 go 而不考虑 java,原因就是有一部分功能和组件会以 agent 的方式运行在端上,这种场景兼顾运行效率和开发效率以及环境依赖以及社区,人才用 go 有很大的毛病?
    wuwukai007
        42
    wuwukai007  
       2020-11-17 11:56:23 +08:00
    要说性能优势就太没说服力了,大家都知道 python 慢,那你们公司为什么当初还要用 python ?想想你们公司最看重的是什么,如果当初看重性能也不会用 python 。
    jjshare
        43
    jjshare  
       2020-11-17 12:07:46 +08:00
    @specture 你自己说了啊~你们团队的产品是企业级产品,对安全性,稳定性要求很高。

    这种场景兼顾运行效率和开发效率以及环境依赖以及社区。

    运行效率,go 并不是最强的,开发效率上 go 要造的轮子多,也不是上选。

    环境依赖,这个是虚拟化来解决的,也就是 docker 那套。

    社区,python 、Java 哪个的社区没有 go 活跃吗?

    我是看了你的话,才那么说的,不具备技术决策的能力,戴帽子谈不上,跟我没有关系。
    gaolycn
        44
    gaolycn  
       2020-11-17 12:18:02 +08:00
    @tikazyq @specture go 只是遍历 100000000 次,python 则创建长度是 100000000 的列表????这样比较?
    Xusually
        45
    Xusually  
       2020-11-17 12:22:14 +08:00
    python:年轻人,耗子尾汁
    blless
        46
    blless  
       2020-11-17 12:36:09 +08:00 via Android
    @tabris17 对公司还好,整个软件生态还是有差的
    Jackeriss
        47
    Jackeriss  
       2020-11-17 12:37:49 +08:00 via iPhone
    web 开发不要在性能上纠结,都用协程差距不大,毕竟耗时在 IO,计算密集型任务 Python 一般会有对应的 C 库
    Hellert
        48
    Hellert  
       2020-11-17 12:38:51 +08:00 via Android   ❤️ 1
    go 部署简单,这才是巨大优势,下个版本 1.16 自带嵌入资源功能,更方便了
    tikazyq
        49
    tikazyq  
       2020-11-17 12:51:42 +08:00
    @gaolycn 我就知道有小白要来较真,如果不生成数组改成 for 遍历,结果也一样
    oahebky
        50
    oahebky  
       2020-11-17 13:06:43 +08:00 via Android
    Python 辞藻药丸,赶紧转 Golang !
    yzbythesea
        51
    yzbythesea  
       2020-11-17 13:10:37 +08:00
    如果是 macbook 的话,跑 python 的时候,pmset -b reduce 1 可以对 CPU 降频。

    如果是 PC 的话,工具应该会更多。
    libook
        52
    libook  
       2020-11-17 13:18:31 +08:00   ❤️ 1
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html
    这个网站上有很多种语言的计算密集型性能对比,你可以看看主流语言的对比情况,会发现现在很多情况和自己原本了解的不一样(比如 JS/Node.js 和 Java 性能差不多)。

    要清楚的一点是,性能对比通常都是在计算密集的场景测试的,但对于业务服务开发来说,基本都是 CRUD,性能瓶颈通常在 IO 。

    Go 的优势主要在于国内好招聘,以及学习成本低、团队代码管理成本低,技术烂的工程师也不会写出太烂的代码(相比其他主流语言来说的话)。
    bbao
        53
    bbao  
       2020-11-17 13:25:48 +08:00
    你自己连场景和 demo 都出不来,你怎么在部门内推广让其他人用啊?
    est
        54
    est  
       2020-11-17 13:28:39 +08:00
    标题是:

    求推荐个 demo 展示 go 相较于 Python 性能优势的


    内容是:

    python 写起来是快,但是维护性真的不太行,性能只是一方面。不同的产品考虑点也不一样,我们团队的产品是企业级产品,对安全性,稳定性要求很高


    又要企业级,又要安全,又要稳定,又要性能优势,推荐用 JAVA
    bbao
        55
    bbao  
       2020-11-17 13:28:42 +08:00   ❤️ 1
    想一下子让所有人转语言,尤其在你自己还不懂都情况下,基本不可能。
    如果楼主对 golang 感兴趣的话,可以在现有的框架或者业务模块,利用「业余」时间进行重写,然后比较线上目前运行模块的性能,和用 golang 重写之后的性能比较;这样久而久之,会比较有谁福利,而且你也能起到主导地位,也能逐步的替换。

    先做个分享内容吧,有没有优势,优势是什么,不是通过你的 demo 和场景 其他人就能接受的,尤其,你还不懂的情况下。
    lewinlan
        56
    lewinlan  
       2020-11-17 13:43:26 +08:00 via Android
    Fastapi ? Cpy 混合编程?各种 lint ?还有 mypy 要不要了解一下?
    Python 越折腾,越显示出 Go 的好处。
    性能方面随随便便改写个现有的业务模块也都比 Python 快,而且还有说服力。
    buffzty
        57
    buffzty  
       2020-11-17 13:43:47 +08:00
    @bbao 说的在理
    hellos
        58
    hellos  
       2020-11-17 13:50:29 +08:00 via Android
    @gimp 你得都跑一遍,兴许你的机器配置更高呢
    skinny
        59
    skinny  
       2020-11-17 13:54:54 +08:00
    居然拿 Pyhton 和 Go 比性能……那么在乎性能就不会用 Python 了。反正你都不能 Carry,别人干嘛要听你的,dotnet core 性能不一样秒 Python 吗?!而且语言还比 Go 好。
    skinny
        60
    skinny  
       2020-11-17 13:56:20 +08:00
    @skinny C#
    clino
        61
    clino  
       2020-11-17 14:01:37 +08:00 via Android
    @seanseek py 是经过编译执行的
    关键是动态类型还是静态类型
    1109599636
        62
    1109599636  
       2020-11-17 14:13:42 +08:00   ❤️ 1
    我以前写 python, 现在在做 go 。 我的个人经验来说,如果业务出现了性能瓶颈,一般是出在数据库查询,缓存和代码逻辑上,很少涉及到语言本身。 如果楼主还没有到语言本身这一步还是不要换了,python 和 go 编写速度差很多,go 性能很不错,但是 python 一天写完的需求可能 go 要好几天,我们一开始换成 go 的时候团队还没适应 go 的迭代速度,用 python 的速度要求 go,那几星期真的是天天加班。。。。
    specture
        63
    specture  
    OP
       2020-11-17 14:25:42 +08:00
    @jjshare 环境依赖,这个是虚拟化来解决的,也就是 docker 那套。真的凸显你的无知,端上懂? agent 懂?举个例子,Prometheus 的数据采集 agent 你用 java 写?装个 docker 解决依赖问题?
    specture
        64
    specture  
    OP
       2020-11-17 14:31:45 +08:00
    @lewinlan 老哥看来是真正实践过的,不是某些回帖的键盘侠。至于我发帖其实就是想看看有没有比较好的吸引眼球的 demo,并不是通过这一次 ppt 去改变团队技术栈。改写业务模块是有搞了一些的,而且有一定优势才决定给部门进行培训。
    imn1
        65
    imn1  
       2020-11-17 14:40:04 +08:00

    我觉得这个有点多此一举吧,搞技术的都知道 go 比 py 有性能优势吧,还用说明么?
    选哪个往往不是从性能这点考虑的,更多是场景和开发成本,尤其开发成本是很复杂的,不是换个开发环境就可以了,人员结构、薪酬结构、软硬件结构……等等,全部重新招聘?

    老板,那个 specture 野心大得很,想取代您发号司令呢……🐶
    nnd
        66
    nnd  
       2020-11-17 14:46:38 +08:00
    水仙花数,go 性能比 python 快上百倍。不用太麻烦,就写一些简单的计算类的问题,性能一下就拉开了。复杂一点 go 并发性能比 python 不知道好哪里去了
    specture
        67
    specture  
    OP
       2020-11-17 14:49:06 +08:00
    沉了沉了。单纯问一个 demo 被一群键盘架构师 YYGQ 。 说得很清楚了,本帖只是分享,不是通过 demo 来做技术选型。团队具体情况也不是三言两语能讲清楚的,那些为什么不用 java,go 就是垃圾全面不如 java 的建议 email 谷歌把 go 废除了。最后建议某些键盘侠一是学习下语文,二是学习下涵养,欢迎对号入座。
    specture
        68
    specture  
    OP
       2020-11-17 14:49:28 +08:00
    @nnd 感谢,我了解下
    jjshare
        69
    jjshare  
       2020-11-17 16:07:14 +08:00
    @specture 自己弱,把别人都当傻子,呵呵了~还懂?懂?懂?也是见识了~

    一个监控的数据采集 agent 搞的像多么高深一样~
    xcstream
        70
    xcstream  
       2020-11-17 18:23:24 +08:00
    单个的循环测试没什么意义,
    要看相同功能的应用谁快
    tairan2006
        71
    tairan2006  
       2020-11-17 21:18:00 +08:00
    我司是 go 和 java 混写的

    go 主要用来写网络通信中间件…用 java 写这个太痛苦了
    houzhiqiang
        72
    houzhiqiang  
       2020-11-18 01:32:32 +08:00
    @tikazyq 这个性能测试像是闹着玩,你用 c 写个空循环,编译器开-O 2,都能把空循环代码去掉。python 应该用 while 循环写。我用 python3.7 测试确实好慢啊,但是 pypy3(Python 3.5.3 (7.0.0+dfsg-3, Feb 21 2019, 03:51:22)
    [PyPy 7.0.0 with GCC 8.2.0])比 python3.7 快了 67 倍
    nash
        73
    nash  
       2020-11-23 17:22:15 +08:00
    我大 PHP 就不配提么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1820 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:32 · PVG 00:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.