點選上方“AITop100”,選擇“星标”公衆号
重磅幹貨,第一時間送達
很多人的程式設計能力/很多業務的問題挑戰,還不到考慮python性能的程度? 那就看看知乎上的大神怎麼解釋吧! find goo: python和java比,運作速度比java慢,java強大于改進n次的強大jre,但python在很多領域能調用很多現成的開源庫,在資料分析中有優勢,pyhton的代碼比java要簡潔,容易入門和使用。在優化的計算庫幫助下,如numpy numba,pandas,scikit-learn,python的實際問題運算性能并不低于java。java主要是架構太多,相對複雜,java主要用于業務程式開發,符合軟體工程理論,可伸縮性強,強類型有利于對程式的靜态檢查分析。java随着安卓,hadoop,spark的興起,加入java語言的公司很多,性能也可以通過優化解決很多問題。很多伺服器如ubuntu server,centos都預設支援python,而java虛拟機需要安裝配置,python的安裝使用也相對簡單。python的庫有開箱即用感,很多業務領域,你可能還在用oop寫代碼,考慮設計模式,用鋤頭挖溝時,而python調用挖掘機api已經炒菜完工開飯了,缺點是油耗比較大。
Python和c#相比,c#依賴強大的微軟優化的.net虛拟機和強大vs ide,在windows平台下運作速度比java要快,但跨平台運作後如mono,速度就慢了,功能也不完全。c#的跨平台能力比不上python,c#比python要複雜,c#文法和java,c++借簽,比較受程式設計人員喜好。mono的出現,unity3d用c#調用c++做遊戲業務邏輯,可以在手機上流暢運作,展現了很多程式的性能在于良好的設計,可以把高性能的用c/c++寫,用c#,java,python寫容易變化的業務邏輯部分。c#在mon虛拟機下運作速度還可以,但linux控在伺服器上有java,python,php,是以用mono做web比較小,從unity3d的成功來看,用c#做為業務腳本語言,用c++做庫也能擷取很高的性能。這是折中性能和開發速度沖突的一種解決方案。很多複雜的業務語言用java,c#,在團隊開發時易用性好,也說明了python的工程化比較差,對強類型的支援弱不适合靜态分析,但python一但用強類型申明,那麼是另一種java,也就不是快捷語言。在單純的計算比較,各個虛拟機語言相差不多,其實除了現代很多業務系統瓶頸在io,在網絡,在算法,在設計,你2秒運作1.2億次,而沒有資料庫或緩存能做到2秒内記錄完1.2億條資料,都是1秒在1百萬記錄以下,如果走網絡速度更慢,持續平均1秒能記錄下幾十萬條資料頂天了,是以這些語言一直在等io完成任務。 python和go語言相比,go語言相對較新,go語言的庫沒有python的豐富,畢竟python發展了幾十年,go語言最大的優點是協程,速度快,支援高并發,但任何支撐高并發的語言程式設計都不是一件易事,最大的缺點是,名稱有google的go,所有很多其他的巨頭公司本着競争的觀念對有類似商标的語言有抵制心理。而python是開源,用得公司特别多。go語言的文法如果能像c#,java類似,可能會發展得更好。很多語言為什麼會用它,不在于文法,不在于性能,主要在于這個語言開發了什麼成功的産品,另人會mock這個産品,用這個語言,Docker就是go語言開發的,适就于大規模分發容器。 python語言和c/c++相比,python開發速度比c/c++快,因為c/c++有指針,幹什麼之前,需要考慮好指針的技巧,指針弄不好,會造成記憶體洩露,一點記憶體洩露不要緊,但乘以時間乘數就會耗盡整個記憶體,因記憶體洩露造成的24h*365天伺服器需要重新開機會造成實際經濟損失,是以開發商業背景業務程式最好用無指針的java,php,python。但對使用者來說python,java,c#,c/c++開發同樣功能的程式,使用者會選擇c/c++,是以在軟體業無數成功的标牌軟體是c/c++,這是c/c++的成熟之處。c/c++主要是開發成本高,同樣的程式可能python,c#一周,c++搞二個月很正常。但為了利益,花再多時間也有人幹,如同現在一樣有人用彙編寫加密代碼,用FPGA把程式做成晶片,追求的是極緻的速度。c/c++的快是直接編譯成二進制,無jit,vm,而python最快也隻是調用c的擴充。開發成本也是很高的成本,進階的c++程式很貴,如在美國進階的c++程式員年薪在百萬人民币以上,有時不是大應用時,用易于使用的語言,上進階點的電腦,上叢集就可以了。如用python顯示卡來加速,買個顯示卡也就萬元。c/c++适合精雕細琢,走精英路線,python适合快速開發,走大衆路線,其實對于影響性能的部分可以結合使用,用python調用c/c++庫。随着編譯技術進步,電腦的計算力成本會随時間下降,計算力越來越強,最近的cpu多核主頻高達5g,理論上比2.5g的cpu算力快一倍,用液氮超頻可達6.7g,同樣的核也比我電腦快了1.5倍(如果用進階c++語言程式員優化了1倍時間花費1人/年,顯然超過了換計算機的錢),顯示卡在多核的支援下浮點運算能力也越來越高(可用NumbaPro,PyCUDA), HPC在雲市場可以租用到,超級計算機也可以向有關組織租用機時測試,動态語言以其易用性開發成本低在很多領域可以取代高性能的編譯語言,但極緻的編譯性能軟體市場也是不斷擴大的,很多行業算力跟不上,很多np-hard問題對算力需求不是線性增加能滿足的,人們對性能的需要實際是越來越高,如世界競争的超級計算機,比特币礦機,深度學習算法。誰都不可以取代誰,而是大家都結合發展了。用什麼語言沒有好壞之分,關鍵是在目标程式追求的是什麼。 gaoquan yan: 性能不夠 增加硬體,程式員出活的時間成本比機器成本貴多了。 hhdh: 我看了下3.6有很多性能優化的地方,估計以後Python也可能會向着性能優化發展。順便其他答案都說了,找到性能差的地方就用C改寫,不過我看到很多Python程式員最後都去寫了Golang。 zhihu: 看你需要。可以針對性優化,也不費多少事。 CPU密集的就上C拓展。 IO密集的上uvloop。 Web服務之類的 pypy 挺好。 畢竟CPython沒有JIT,性能相對來說欠缺。但我見過的Python項目,大多還沒有大到需要上優化的地步。隻是開發者本身太菜了而已。 zhihu2: 借用一句話:很多人的努力,還不到談論天賦的程度。 同理:很多人的程式設計能力/很多業務的問題挑戰,還不到考慮python性能的程度。 Alan: 在這個行業,相信大家不止一個人也不止一次的說過類似的話:"一個成熟的系統不會是由一門語言去包打天下的”。 還有就是python 在企業中可以作為主要使用語言,比如做web開發的公司,為什麼不呢,真正涉及到密集運算的部分很少,我們可以用很多替代方案解決,例如用c重寫那部分,用python粘合,或者是用其他語言重寫,再提供service接口等等,那個不是要命的問題,業務複雜度和需求變更才是要命的,這個小時讨論,隻有兩個小時編碼,1個小時測試,快速釋出到線上所有環境讓使用者使用才是要命的問題,這個時候你跟我扯性能,那不是搞笑嗎? 還有一點是大部分國内的企業用非python是因為能用python真正解決問題的程式員相比之下少一些,這個來自于我們内部的資料統計,我們是做智能招聘的,通過大把(千萬級)的履歷分析得到的結果。(不是那種學了一段時間python就妄下定義的人),市場的選擇而已,并不能說明問題。 是的,我自己所在的公司就是用python做為主要開發語言,也包括科學計算,海量分析相關的東西,沒見到他們工作時說python性能差,性能差的地方隻占他們工作的百分之幾,換個語言就繞過去了,當然你要說用python去寫遊戲用戶端圖像處理那部分那就真的蛋疼了。每種語言都有他合适的應用場景。 轉載知乎位址: https://www.zhihu.com/question/40393531
最新熱文薦讀
視訊| 機器學習從0到1(第1節:機器學習簡介)
視訊| 機器學習從0到1 (第2節: 入門計算機視覺)
視訊| 機器學習從0到1(第3節:卷積神經網絡)
視訊| 機器學習從0到1 (第4節:石頭剪刀布)完結篇
下載下傳|《樹莓派Python程式設計指南》
下載下傳|《Python金融大資料分析》
下載下傳|《Python性能分析與優化》
下載下傳|《美團機器學習實踐》
下載下傳|《TensorFlow 2.0深度學習》
下載下傳|《從Excel到Python-資料分析進階指南》
資源|《量化投資以Python為工具》專業性極強的金融領域書籍
資源|《Python機器學習及實踐-從零開始通往Kaggel競賽之路》
實戰|自然場景中文文字識别,身份證火車票都能識别
實戰|那些年玩的QQ飛車,AI也學會了
覺得本文對你有幫助?請分享給更多人
歡迎關注上方右側我的騰訊視訊号
介紹一下我的騰訊視訊号以及我自己