廖雪峰 python 教程中的一段话:“C 程序的运行时间需要 0.001 秒,而 Python 程序的运行时间需要 0.1 秒,慢了 100 倍,但由于网络更慢,需要等待 1 秒,你想,用户能感觉到 1.001 秒和 1.1 秒的区别吗?”
从时间上我觉得他说的对,确实不用太在乎他的执行速度,毕竟短板在其他的 io 上(如网络)
但是 cpu 呢,如果同样服务 1000 个客户端,c 只要 RK3588 就可以了,而 python 需要 12 代 I7
这成本就高了,是不是,特别是我们这种不停强调降本,低价吸客户的公司
其实我也不关注廖说的 1.1 秒还是 1.01 秒,只是如果完成这个工作,一个 cpu 花费 20hz ,一个花费 2000hz ,我就扛不住了,作为服务端程序,我得多堆叠 100 台服务器才能完成
Benchmarks Game - Python 3 vs C++ Performance Comparison

这种问题你都要问, 说明你的知识储备量和公司职位不需要考虑这些问题
什么写的快用什么就行了

如果真需要考虑这种问题, 听架构的就完事

web 应用确实是这样的.
但是如果是多个任务流水线式执行起来呢? 如果是纯离线应用处理数据呢? 运行慢这个弊端就暴露出来了

不合理,网络根本不需要 1s 。网络远比你想象得快的多。大家会说数据库查询慢,但没人会说网络慢,另外,1s 的数据库查询其实也可以归入到慢查询中了。

各有各的优势,你不会想用 C 开发神经网络的(防杠,是开发不是部署),同样你也不太可能用 python 开发商用级别的单片机程序(防杠,不太可能表示还是有少量可能性的)。各自在不同场景下发挥作用。

如果是极端追求性能、计算密集(比如游戏引擎、图像处理、金融高频交易),C 更合适。

如果是业务逻辑复杂、I/O 密集(比如 Web 服务、数据处理、原型验证),Python 完全够用,还能更快交付。

最佳实践是 混合使用:用 Python 写业务逻辑,用 C/C++/Rust 做性能关键模块。

“但由于网络更慢,需要等待 1 秒” 你们的用户太棒了。

我们 p999 超过 20ms 老板就要求优化服务了。

现在咱们遇到的场景,大概率到不了拼机器性能的地步,啥语言其实差别都不大,重要的是业务逻辑能跑通。真到了拼语言性能的地步的话,自然就有办法解决了,Java 性能也不如 C ,还不是一样能扛住电商并发。我是写 Python 的,经常有人给我说 Java 性能多好,我说就你们现在碰到的场景,有那研究语言性能的功夫,多申请俩服务器比啥都强

假的,因为 tcping 到百度,只需要 50ms 。

另外,先明确目的,然后再使用恰当的语言,他本末倒置、扭曲工具属性了。

他所说的网络是 socket 层的等待时间,但是显示中往往还会有 tls ,http 等上层协议。 如果说 python 够快,那么应该使用 python 编写 ssl 实现,可以试试有多快

先不说举个这么特例的情况来代表这两种语言的一般情况这种典型逻辑错误
就光说这个例子本身,我 C 比你 Python 快 100 倍,那不就说明我 C 能在同样返回时间里比你 Python 多处理 100 倍的任务吗。
你管这叫一样?

200 吧

现在除了 ai 训练场景,cpu 都是过剩的,没啥子大的意义

同意,现在手头同时有 c 和 py 的项目,py 重构到 c 成本太高,只能对关键逻辑重写 c 。要是业务逻辑变动稍微频繁点,单纯一个语言修改起来极其难受。但是这样对开发和架构的要求就高了。

真的强调性能你上专用处理芯片啊。
用啥通用 CPU ,用啥通用编程语言嘛。

资源全踏马浪费了!电费里大部分都是浪费的资源!!!

专用芯片的处理能力远超通用芯片,差别相当于自行车和宇宙飞船的区别。

python 和 从来就不是对立的, 快速迭代开发 + 关键代码和库重构就是 核心,
往往是核心模型比如计算以及网络底层处理用 c/c++/rust 写,python 做业务层调用封装好的共享链接库。

比如 Opencv, libuv 的库的封装, 可以说 python 能达到几乎 c 的 70%水平,比 java jni 调用 opencv 都快多了,
libuv 的 库 导出为 python 接口有一个叫做 Pyuv

ffmpeg 的众多库如 libavcodec, libavformat, libavutil, libswscale 的接口导出叫做 PyAV.

货比货得扔,人比人得死啊。
针对你的需求,理性选择就好。
如果合适,你就选。

不要做无意义的对比,有时候看似更低的成本,其实附加成本更高。

你的对比方法,其实就相当每个女生的想法:
到底是嫁给亿级富翁,还是百万级富翁。

但前提是,你的情况是什么样的,有没有得选。

现在 amd intel 的 cpu ,制程先进程度根本就不是最新的,精度并不是最高的,至少落后最高精度的 2-3 个档次,你猜为什么?难道是他们不想吗?他们甚至不用管生产,只需要设计就足够,为什么他们不采用高技术的精度呢?这到底是为什么呢?

你关注的点是吞吐量,处理速度会影响吞吐量,但不是唯一决定因素。

python 和 c 肯定不一样啊,有不同的应用场景,纠结这个没意义。

由于 Python 和 C++ 相互调用操作太好了, 所以不少 c++库 都可以调用 python, 而 python 也可以调用导出的 ffi 接口
libboost-python 就是 Boost.Python 能够完成 python 和 c++ 相互调用.

哥们的用户都是电竞小子吗 20ms 就受不了了

大家觉得 python 不慢是因为那些 python 很慢的东西,大家选择了用 c/c++实现,然后用 python 做 wrapper. python 所有普遍对性能有要求的包,无不是如此实现的。

java 之父马士兵。python 之父廖雪峰

有的时候劳动力成本比服务器成本要高,比如加台机器一年要花几万,但是几万元你未必能雇佣到能省下这台机器的工程师。

一个 cpu 花费 20hz ,一个花费 2000hz
。。。怎么还有花费赫兹的说法。。。。

说句得罪人的话,80%的项目都等不到它的 1000 个用户。

网页交互的实时性需求并不是那么高吧, 技术栈选 python 还是为了快速上马 快速迭代开发, 而且 python 也能调用底层库优化速度, 感觉没有那么不堪, 循环什么的慢倒是真的慢. 不然也不会有 numba 什么事了, GIL 虽然是个不好用的东西,但是省心智了

我们线上统计,客户端发网络请求到收到回复。90 分位要 1 秒以上的。

如果讨论 service ,python 垃圾并不是垃圾在计算性能

用 Julia 就行了

考虑到 Python 在 90%以上的情况下都是指 CPython ,那 Python 就是 C ,你嫌慢写 C 函数呗,这就是个胶水语言

当用单个用户请求 case 来评估服务器容量的时候,对不对已经不太重要了,开心就好

纸上得来终觉浅,直接看别人的源码你会提升更快。
就算是 C 语言已经很快,Linux 内核代码里,容易造成性能瓶颈的地方往往是直接用汇编。一个成熟的项目往往都是混合语言的,Python 调库,C 语言实现库,并存优于单一语言实现。

20ms 就受不了了?这么能吹牛逼我还以为这里是逼乎呢

看你要不要 "先把东西做出来"

其实很多项目,一天平均 qps 还没开发人员多

不过话说回来,如果单纯 python web ,确实垃圾,谁用过谁知道

火车和皮卡。。。

错误的,python 和 nodejs 一样,我公司 95%的业务都用 python 写,但是最近一个新项目我用 nodejs 写后端了

错误的,网络延迟你可以靠并发去掩盖,比如单个用户 0.1s (处理时间) + 0.9s (传输时间) 的场景,大可以在等待 IO 的时候去服务其他用户,毕竟网络 Socket 本身是交给内核去处理。但是如果处理时间要 1s ,那真的就只能处理 1/10 的用户了。

理论上很多模块可以用 FPGA 实现,用 Verilog 编写,只是开发量大了一点点点而已,但速度又是几十倍的提升啊

现在绝大部分 web 项目都不太需要考虑服务器性能问题,用户量和数据量根本上不去。。。等到真需要性能的时候,加机器比加人换语言写性能更好的代码更有性价比,等到加机器搞不定的时候再换语言重构部分服务就行(除非项目一开始就定位为用户量大了),就算淘宝也是从 php 到 java 这样的历程走过来的

一个是你舒服,另外一个是机器舒服,你选择哪个舒服?

我写的服务,接口响应速度一般都在 10ms 以下。1 秒的响应速度是不可能被接受的

所以写个代码我还要考虑机器会不会跑的太累?我只知道我用 python 舒服,前期先快速抢占市场,项目活了有稳定盈利,才有资格谈论优化
Instagram 日活 2.5 亿、Reddit 都是 python ,请问咱是什么公司就考虑性能了,跟用什么语言写有个毛关系?

现在有一种语言可以让你的接口响应时间减半,但是你的每日工作时间由 8 小时变为 12 小时,工资待遇不变,你换不换吧就说

1000 可以换成 100

这个逻辑就像兰博基尼和我自行车的速度是一样的,反正大家都要等红绿灯。

“C 程序的运行时间需要 0.001 秒,而 Python 程序的运行时间需要 0.1 秒,慢了 100 倍,但由于网络更慢,需要等待 1 秒,你想,用户能感觉到 1.001 秒和 1.1 秒的区别吗?”

这句话完全没有 Python 和 C 是一样的 这个意思

在 IO 密集型应用中听起来没毛病,CPU 密集型应用就不得行了。

PHP 都能用来做 web,python 为什么不可以呢?

引力波发现的数据分析也是 python 搞的

你真要考虑这问题的话,不要放到服务器上考虑,而是放到那种超低端的单片机上去考虑,这时候才是需要考虑这个问题的时候
对于服务器来说,早就脱离单体程序了,比较轻松的可以选择升级配置更换硬件甚至直接分布式集群解决瓶颈。

这个可能真不是吹牛皮,我们原来打算用云的 redis,但是云的 redis 的网络延迟在 100 微秒左右(没看错,就是在 100 微秒 0.1ms),联系了他们的 redis,网络工程师等等一起研究,网络工程师说因为涉及到多跳,最少 100 微秒左右.我们使用 redis 在单线程中,没有多线程并发(祖传的,就是这样用,要改相当于整个游戏存储重写),这样会把 QPS 限制在不到 1w,我记得在 7000 左右. 因为一个玩家登录,会涉及到到次 redis 读写,所以只要在线人数超过 1000 人,这个服就开卡了.没法办,我们只能用自建的 redis,使用 127 直连

游戏服务端应用还是尽量单体。另外,你直接用内存不香么?干嘛要用 redis ?我们是直接移植 redis 代码,静态编译在应用里的(因为要用那些数据结构,反复了很久,决定直接用 redis 代码)

首先是人,其次是场景,最后才是语言

最近刚被合作伙伴的 python 小子坑了一把,第三方把金额、汇率之类的数据以字符串的形式给他,他转成浮点数,内部很多逻辑处理完,然后再把一堆数据转成字符串给我,于是,那天我听着窗外台风桦加沙的呼呼声,远程教他为什么有些数据会有一点点对不上

其实人是真正决定最终跑得好不好的最大因素,python 队伍里面半吊子太多

python 胶水层可以慢慢优化,问题不大。只要业务在云上就行。

如果是一个 1 秒执行一次的操作,你为什么要在乎他执行需要 1ms 还是 1s ,对你来说有区别吗,等需要 1 秒执行 1000 次再考虑性能

实际上 python 和 c 对比不合理,因为一个是编译,一个是解释执行。二者没有对比性,就像同样是飞机,一个是螺旋桨,一个是涡喷。

如果说都是解释执行,c 和 lua 更近一些。用 lua 和 python 对比可能更好一些;但是很可惜,lua 完胜,python 完败。

这并不是说 python 一无是处,衡量一个语言的生命力,我觉得要看:
1 、生态; 2 、场景; 3 、未来。

当下的 python 的生态是当之无愧的第一,我觉得这个结论应该是无人质疑的吧; python 在可预见的未来,也不太会象是 perl 、ruby 一样陨落;
唯一的争议是 python 的性能方面的劣势;不过对于非密集计算场景,其实大多数时候足够用了;

你这个场景应该放内存,访问可以从微秒级变成纳秒级

金融行业 Python 肉眼可见的越来越流行。开发速度快实在是太重要了

计算密集型和 IO 密集型的场景都分不开的话不用考虑这个问题

现在不是流行先做,再完美吗? py 正好适合干这个

#57
#52

游戏中的全局数据,还有在线玩家的数据都在内存中,这些肯定不是读 redis 的,但是数据要落地啊,要不然游戏重启,崩了,机器故障了,数据不全没了,我们直接拿 redis 开 AOF 当落地数据用,不是所有数据都存在 redis 里,很多数据还是在内存里的