有人说腾讯使用C++为主要开发语言?java少?为什么?

李容海


我所见到的一部分原因是,腾讯内部的各类c++组件已经非常丰富并且稳定了,这种情况下若非特殊原因,实在没理由花力气和冒风险去切其他性能还不如c++的语言,我c/c++,java,python,lua都写过,对语言并无偏执。我接触到的一个基础模块,日请求量200亿+,服务器数目却不足百台,其他语言是很难做到的。所以,新模块开发依然首选c++,但内部也一直鼓励新技术,前提是有正当理由。很多时候我们只是了解到一点皮毛,然后就根据这点皮毛去揣测不熟知的领域,这里不单指计算机语言,这种习惯是很危险的,共勉。


小红的甜心


我负责过QQ秀和Qzone的运维,也在QQ秀做过开发,当时我所在的部门,如果用java作为开发语言的话以当时服务器的数量是不足以支撑数亿用户的服务的。

要知道,与淘宝不同,腾讯许多业务是免费使用的,例如qzone的许多功能都可以免费使用包括心情,日志,相册,服务器要承担这些亿级的有大量高密集的碎片化请求,如果用java来支撑,经济上是不划算是一方面,响应速度方面用户体验也非常不好。

再来看淘宝,与qzone发个心情,日志相比淘宝用户在淘宝上的行为最终要触发商品交易的,说通俗点就是淘宝用户的行为大都是跟钱相关,而且淘宝要不断迭代更新的同时确保程序逻辑的严谨,Java综合来说是个非常好的选择。

对于高效处理这些高密集的用户请求,c是一个非常好方案,非常适合腾讯的用户场景;淘宝也不是不用c,像淘宝的图片服务器,也是属于海量的高密集用户请求服务,淘宝在这里使用淘宝技术团队修改过的nginx,我们都知道nginx就是c开发的,类似的场景在淘宝的服务架构里应该还有很多这样的例子,阿里也雇佣了不少c的工程师,Linux内核工程师。



小x全栈工程师


腾讯主要以C++为主,而阿里主要以JAVA为主,这是为什么?

看看它们的主打产品就能看出个大概了。一提到腾讯,我们首先想到的肯定是QQ和微信。其实,腾讯还是全球最大的游戏公司(排在前面的还有美国微软、暴雪,日本索尼、任天堂,我国网易等等)。大家耳熟能详的王者荣耀、英雄联盟(LOL)、绝地求生(吃鸡)、QQ炫舞、穿越火线等等就属于腾讯。不论是QQ、微信还是游戏,都有一个共同点,对实时性要求特别高。拿微信来说,几十人或几百人的大群,消息几乎马上就能发出去,大家都能同时收到。王者荣耀这类游戏,那要是延时超过一秒,关键时候就挂掉了。

再看看阿里的产品,主要是偏电商网站和电商APP的,淘宝、支付宝、天猫、蚂蚁金服、聚划算等等。它的APP基本上是嵌入的web浏览器,所以本质上都是以web应用为主。web应用,对实时性要求相对就要低一些了。当我们打开或刷新一个网页的时候,即使延时一秒甚至3秒以上(显示转圈或“正在加载”),都是可以接受的。支付、购物、打车、共享单车、汽车导航等都是如此,用户可以接受延迟。就拿导航来说,导航表面看是需要非常实时的,但是实际上主要的运算在于GPS信号和本地离线计算(无需服务器),而后台服务器主要就是开始的路线计算那一会儿以及路况推送。路况推送目前显然不是实时的。

从腾讯和阿里的主要产品就可以看出不一样了,腾讯的产品对实时性要求高一些,所以更需要C++这样的语言进行开发。C++没有虚拟机和垃圾回收机制。如果是JAVA,有可能一个垃圾回收就导致游戏玩家卡顿一两秒(但是web应用可以忍受)。这对于小公司倒无所谓,而国际知名公司,必须注意这些每个细节。特别是即时竞技游戏,绝对不允许出现卡顿。

JAVA近年来发展很快,特别是JVM的优化还有一大堆成熟框架。但是,在之前的岁月,JAVA的性能还是和C++差距很大的。而腾讯起家较早,QQ大概是1999年就火了。一个大企业,技术积淀很重要,早年既然选择了C++,不可能在短期内改过来。

即使到今天,JAVA虽然进步很快,也仅仅是缩短了和C++在性能上的差距,并没有超过。所以腾讯仍然有理由继续使用C++。

腾讯也只是核心产品主要使用C++,并不代表只使用C++。在web应用的后端,可能会大量用到JAVA。3D手机游戏客户端(如王者荣耀),可能会用到C#。安卓APP客户端,主要用JAVA。在一些新上线服务的后端,可能会部分选择Go。


犍为真人


从事软件开发多年主要使用C/C++ Java三种编程语言,简单的认为腾讯使用C++比较多,显得有些武断,因为腾讯这种大企业产品多如牛毛,不能简单的认为C++就在腾讯公司用的最多,一位不同的产品对于编程语言使用也不尽相同,从事浏览器内核研发多年,关于移动端的QQ浏览器也做过深层次的分析研究,主要代码实现还是C++主,采用系统自带的动态库,通过dlopen的方式动态调用,从腾讯的产品分布来讲客户端类型的比较多,有时候为了体现性能使用C++相对比较多。

腾讯的产品一般产品的创新性不大,但性能和稳定性非常高,所以很多人虽然对腾讯做的东西不感冒,但是腾讯的产品稳定性和性能无可挑剔。主要是腾讯在性能以及功能的重视有关,社交类的软件对于消息的及时性响应有非常高的要求,从这点上考虑会使用底层库的可能性大一点,不能简单的认为腾讯为了效率都使用C++作为底层开发语言,java编程在安卓开发以及服务器端某些东西的处理上未必就比C++底层表现的差劲。

阿里巴巴企业对于java使用的习惯更大些,主要在于阿里巴巴平台级别的对于功能应用要求更高一些,所以显得使用java更多一些,这些也不是十分肯定的,主要还是在于具体使用的场景,像腾讯的几个客户端应用特别是在安卓系统上的也是按照Java方式去完成,对于编程语言而言合适的就是最好的,没有必要非要使用哪种编程语言,在刻意追求效率的时候底层语言是首选语言,而且在腾讯内部由于长期在使用C++的应用,已经积累了大量的优质底层库,这有点类似于谷歌内部的优秀的集成库,腾讯内部有使用底层优秀库的习惯,这也是腾讯在产品性能一直比较稳定的一个因素。

每个科技企业都有在编程领域有鲜明的特点,曾经在第一家公司由于主要业务是芯片设计开发,在音视频解码这块由于算法的复杂性,在关键人物离职之后很少有人敢动里面的代码,因为代码的耦合性太强稍微做点改动可能就会导致整体功能不适用,只要提到这点大家都会自动绕开,成为大家一直躲避的雷区,以致于在从公司离职的时候这块还是无人动的区域。一个企业的技术氛围一般是初创团队引导出来的,后面的团队都会慢慢适应这种节奏,如同阿里的换岗制度也是文化的一种,不同的技术岗位到了一定时间就要换岗,主要为了适应变化,所以阿里在应对新的变化的时候都表现的非常积极。

腾讯公司一直算是比较稳的企业文化,整体人员的流动也不是很大,长期植根在这种企业对于培养高素质的编程技能是有一定好处的,人员流动在互联网公司里面还算比较小的,而且技术人员的待遇还是不错的,所以很多程序员在里面呆的时间都比较长,每种企业都有自己的文化氛围,技术氛围,编程语言使用的场景要根据实际情况而定,本身编程语言就是一种工具存在不要太在意,希望能帮到你。


大学生编程指南


这个是很自然的。因为java的核心技能不在图形界面这一块。java在早期也做图形界面,但发现自己所做的图形界面始终赶不上C#等语言,于是便忍痛割爱地放弃了这一块,而专注于自己的IO等核心技能。

而腾讯作为一家以游戏和社交为核心的企业,图形界面是其使用得最多的地方,也是其主要的核心业务,因此java在这方面不大满足腾讯的需求,而C++在图形界面方面有优势,故腾讯选择C++作为其主要编程语言,乃于情于理之事。这也是用于人脸识别系统的openCV,同样选择用C++的原因。


飞蛾滩


关于这个问题要你要从腾讯发家开始看。

腾讯最开始是以做通讯软件开始发家的,也就是qq.因为qq主要涉及到的就是网络通讯这一块,再加上当时主要就是用在PC端,从程序的运行效率考虑C++无疑都是最好的选择。包括后面腾讯的一系列产品qq音乐,qq管家,qq游戏等等基本上都是基于C++开发的。据我所知他们的服务端应该也是用C++写的。



湖南伢子在深圳


这个和每个公司的技术沉淀有关系吧,可能腾讯已经沉淀了很多c++的组价,用的也相对顺手吧。就跟阿里喜欢JAVA一样


分享到:


相關文章: