为啥C++很少用于Web后端开发( 二 )


为什么比C++慢200多倍的Python,服务器性能却能达到C++的1/10呢?因为Python大部分时间都是在运行C编写的扩展库以及系统IO,本身py代码运力占比只有5%。
为啥C++很少用于Web后端开发

【这是一道小学奥数题】:已知C/C++(C、C++速度几乎相等,可忽略差异)的速度是Python的200倍。Python和C++走过同样一段路程。Python中间有乘坐C,总耗时是C++的10倍。求Python独立行走的路程占整段路程的百分比?答案为:大约5%。只有那些巨头网站,才有资源和能力用C++来写后台。因为海量服务器的成本差异,远远超过C++开发成本的增长。比如某服务Python要用1000万台服务器,PHP用300万台,Java用200万台,C++用100万台。肯定选C++,节省几十几百亿。
比如脸书已经全面从PHP迁移到C++(70%C++和30%PHP转译C++),服务器减少到原来的三分之一。 而Python最具盛名的网站Youtube也已迁移到C++,此前用C来优化Python依然不能满足。
对于小型网站,如果Python用10台服务器、PHP用3台、Java用2台、C++用1台服务器。甚至起初任何语言一台服务器都够用。这时肯定不会选C++,因为开发成本比服务器贵的多。通常我们粗略估算C++需要两倍的开发成本,一个普通开发约30-50万总成本每年,能节省上百台服务器时才划算。而且C++直接写Web痛苦指数高、快速反应能力低、大量熟手招聘困难,需要有更大成本优势时(成千上万台服务器),才会被采用。
互联网C/C++的替代品:GoC/C++入门并不难学。但因为和硬件底层更近,所以程序形态与自然语言距离更远,需要写更多行语句和花更多时间去掌握。而夺命指针,即是性能飙升的利器,也是程序崩坏的元凶。因此,C++要更多时间去编译、测试和检查程序,才能保证稳定,不适合快速开发更迭。
实际上是后端开发语言太方便、灵活、稳定了,倒逼C++只能去做内核了。互联网光一般的更迭速度,C++的缓慢接近凝滞的身段,令人没法提起改进C++直接Web开发的兴趣。索性直接写出了PHP、http://ASP.NET、JSP等支持高效开发的产品。但当网站规模增大的时候,高并发和密集运算部分C/C++又成为了必须的选择。
Go就是谷歌为了解决这些痛点,应运而生的。具备接近C的性能,但更安全快速、更具备互联网基因,目前在后端增长最快。

■网友
【为啥C++很少用于Web后端开发】
业务迭代效率互联网的web后端追求短平快,这里倒不是说cpp效率不高,cpp在多范式上结合了oop和fp,同时保留了c的过程式,拥有几乎所有的语言特性,因此cpp是很强大的,但也就是因为这些特性,再加上特有的pointer,reference 与之叠加起来,cpp是非常非常复杂的,所以一般的公司是很难把控cpp写出来的质量的,这点java虽然死板,但在工程上来说更可控。
还有后端最重要的一个技能就是使用轮子,面向github/stackoverflow/google编程,这点java有很多顶级的后端的轮子,而cpp相对来说没有那么多,当然大厂有很多封装好的轮子,譬如google/tencent等,单对于一般的公司来说,一是没有造这种顶级轮子的实力,二是业务迭代也不允许去造,所以java、Python这种能直接import package对大多数公司来说会更合适。
2. web后端的特点
web后端大多数是和db以及cache打交道,操作数据的时候嵌套业务逻辑,这一特点决定了web后端是重io, 轻计算的,因此好的IO并发模型,好的缓存设计才是关键。因此语言层面带来的性能提升面对磁盘寻道可以忽略不计。

■网友
很早期是用这个,但现在的小孩儿可能不知道这个历史。有一种程序叫cgi ,在它里面会有这样的语句:printf("\u0026lt;html\u0026gt;这是一个网页\u0026lt;/html\u0026gt;");那时候,还没有java,PHp,asp jsp什么的。或者java刚开始有。


推荐阅读