求推荐个 demo 展示 go 相较于 Python 性能优势的 - V2EX
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 7478 次点击
    这是一个创建于 1839 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想在部门推广 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
    一个编译型一个解释性,不讲武德。。。
        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 自带嵌入资源功能,更方便了
    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  
    &bsp;  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 野心大得很,想取代您发号司令呢……
    M7w2kh5a58AhKlcT
        66
    M7w2kh5a58AhKlcT  
       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     Solana     857 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:26 PVG 03:26 LAX 11:26 JFK 14:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86