有人說騰訊使用C++為主要開發語言?java少?為什麼?

李容海


從事軟件開發多年主要使用C/C++ Java三種編程語言,簡單的認為騰訊使用C++比較多,顯得有些武斷,因為騰訊這種大企業產品多如牛毛,不能簡單的認為C++就在騰訊公司用的最多,一位不同的產品對於編程語言使用也不盡相同,從事瀏覽器內核研發多年,關於移動端的QQ瀏覽器也做過深層次的分析研究,主要代碼實現還是C++主,採用系統自帶的動態庫,通過dlopen的方式動態調用,從騰訊的產品分佈來講客戶端類型的比較多,有時候為了體現性能使用C++相對比較多。

騰訊的產品一般產品的創新性不大,但性能和穩定性非常高,所以很多人雖然對騰訊做的東西不感冒,但是騰訊的產品穩定性和性能無可挑剔。主要是騰訊在性能以及功能的重視有關,社交類的軟件對於消息的及時性響應有非常高的要求,從這點上考慮會使用底層庫的可能性大一點,不能簡單的認為騰訊為了效率都使用C++作為底層開發語言,java編程在安卓開發以及服務器端某些東西的處理上未必就比C++底層表現的差勁。

阿里巴巴企業對於java使用的習慣更大些,主要在於阿里巴巴平臺級別的對於功能應用要求更高一些,所以顯得使用java更多一些,這些也不是十分肯定的,主要還是在於具體使用的場景,像騰訊的幾個客戶端應用特別是在安卓系統上的也是按照Java方式去完成,對於編程語言而言合適的就是最好的,沒有必要非要使用哪種編程語言,在刻意追求效率的時候底層語言是首選語言,而且在騰訊內部由於長期在使用C++的應用,已經積累了大量的優質底層庫,這有點類似於谷歌內部的優秀的集成庫,騰訊內部有使用底層優秀庫的習慣,這也是騰訊在產品性能一直比較穩定的一個因素。

每個科技企業都有在編程領域有鮮明的特點,曾經在第一家公司由於主要業務是芯片設計開發,在音視頻解碼這塊由於算法的複雜性,在關鍵人物離職之後很少有人敢動裡面的代碼,因為代碼的耦合性太強稍微做點改動可能就會導致整體功能不適用,只要提到這點大家都會自動繞開,成為大家一直躲避的雷區,以致於在從公司離職的時候這塊還是無人動的區域。一個企業的技術氛圍一般是初創團隊引導出來的,後面的團隊都會慢慢適應這種節奏,如同阿里的換崗制度也是文化的一種,不同的技術崗位到了一定時間就要換崗,主要為了適應變化,所以阿里在應對新的變化的時候都表現的非常積極。

騰訊公司一直算是比較穩的企業文化,整體人員的流動也不是很大,長期植根在這種企業對於培養高素質的編程技能是有一定好處的,人員流動在互聯網公司裡面還算比較小的,而且技術人員的待遇還是不錯的,所以很多程序員在裡面呆的時間都比較長,每種企業都有自己的文化氛圍,技術氛圍,編程語言使用的場景要根據實際情況而定,本身編程語言就是一種工具存在不要太在意,希望能幫到你。


大學生編程指南


我負責過QQ秀和Qzone的運維,也在QQ秀做過開發,當時我所在的部門,如果用java作為開發語言的話以當時服務器的數量是不足以支撐數億用戶的服務的。

要知道,與淘寶不同,騰訊許多業務是免費使用的,例如qzone的許多功能都可以免費使用包括心情,日誌,相冊,服務器要承擔這些億級的有大量高密集的碎片化請求,如果用java來支撐,經濟上是不划算是一方面,響應速度方面用戶體驗也非常不好。

再來看淘寶,與qzone發個心情,日誌相比淘寶用戶在淘寶上的行為最終要觸發商品交易的,說通俗點就是淘寶用戶的行為大都是跟錢相關,而且淘寶要不斷迭代更新的同時確保程序邏輯的嚴謹,Java綜合來說是個非常好的選擇。

對於高效處理這些高密集的用戶請求,c是一個非常好方案,非常適合騰訊的用戶場景;淘寶也不是不用c,像淘寶的圖片服務器,也是屬於海量的高密集用戶請求服務,淘寶在這裡使用淘寶技術團隊修改過的nginx,我們都知道nginx就是c開發的,類似的場景在淘寶的服務架構裡應該還有很多這樣的例子,阿里也僱傭了不少c的工程師,Linux內核工程師。



小x全棧工程師


我所見到的一部分原因是,騰訊內部的各類c++組件已經非常豐富並且穩定了,這種情況下若非特殊原因,實在沒理由花力氣和冒風險去切其他性能還不如c++的語言,我c/c++,java,python,lua都寫過,對語言並無偏執。我接觸到的一個基礎模塊,日請求量200億+,服務器數目卻不足百臺,其他語言是很難做到的。所以,新模塊開發依然首選c++,但內部也一直鼓勵新技術,前提是有正當理由。很多時候我們只是瞭解到一點皮毛,然後就根據這點皮毛去揣測不熟知的領域,這裡不單指計算機語言,這種習慣是很危險的,共勉。


小紅的甜心


騰訊主要以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。


犍為真人


這個是很自然的。因為java的核心技能不在圖形界面這一塊。java在早期也做圖形界面,但發現自己所做的圖形界面始終趕不上C#等語言,於是便忍痛割愛地放棄了這一塊,而專注於自己的IO等核心技能。

而騰訊作為一家以遊戲和社交為核心的企業,圖形界面是其使用得最多的地方,也是其主要的核心業務,因此java在這方面不大滿足騰訊的需求,而C++在圖形界面方面有優勢,故騰訊選擇C++作為其主要編程語言,乃於情於理之事。這也是用於人臉識別系統的openCV,同樣選擇用C++的原因。


飛蛾灘知識產權


關於這個問題要你要從騰訊發家開始看。

騰訊最開始是以做通訊軟件開始發家的,也就是qq.因為qq主要涉及到的就是網絡通訊這一塊,再加上當時主要就是用在PC端,從程序的運行效率考慮C++無疑都是最好的選擇。包括後面騰訊的一系列產品qq音樂,qq管家,qq遊戲等等基本上都是基於C++開發的。據我所知他們的服務端應該也是用C++寫的。



湖南伢子在深圳


這個和每個公司的技術沉澱有關係吧,可能騰訊已經沉澱了很多c++的組價,用的也相對順手吧。就跟阿里喜歡JAVA一樣


分享到:


相關文章: