गो (जावा की तुलना में) इतना धीमा क्यों है?


109

जैसा कि हम 2010 में द कंप्यूटर लैंग्वेज बेंचमार्क गेम से देख सकते हैं :

  • C की तुलना में गो औसतन 10x धीमा है
  • जावा से 3x धीमा है ?

यह कैसे हो सकता है, यह ध्यान में रखते हुए कि गो संकलक निष्पादन के लिए मूल कोड का उत्पादन करता है?
गो के लिए अपरिपक्व संकलक? या गो भाषा के साथ कुछ आंतरिक समस्या है?

संपादित करें:
अधिकांश उत्तर गो लीज की आंतरिक मंदी से इनकार करते हैं, दावा करते हैं कि समस्या अपरिपक्व कंपाइलरों में रहती है।
इसलिए मैंने फाइबोनैचि संख्याओं की गणना करने के लिए कुछ परीक्षण किए हैं : sameसी में ओ (ओ ३ म् विकल्प के साथ) के रूप में गति के साथ Iterative एल्गोरिथ्म गो (फ्रीबल्ड, ६ जी) में चलता है । सुस्त पुनरावर्ती एक गो में 2 timesधीमी गति से चलता है सी की तुलना में (-O3 विकल्प; -ओ0 के साथ - वही)। लेकिन मैंने बेंचमार्क गेम में 10x गिरावट नहीं देखी है।


36
निष्पक्ष होने के लिए, सी भेस में एएसएम है, और जावा में इन दिनों हुड के तहत कुछ गंभीर अनुकूलन हैं।
मैथ्यू शारले

16
शायद बेंचमार्क भी गो की खूबियों को नहीं दर्शाता है। यह हो सकता है कि अन्य बेंचमार्क वास्तव में इससे तेज हों। इसके अलावा, अक्सर यह प्रदर्शन नहीं बल्कि उस कोड की पठनीयता होती है जो सबसे अधिक मायने रखता है।
एक्सट्रोनॉन

7
@ टेक्स्ट्रॉन: मैं सहमत हूं। याद रखें, गो को Google के लिए डिज़ाइन किया गया है और Google नियमित रूप से 2 मिलियन कोर पर कोड चलाता है । बेंचमार्क गेम केवल 4 कोर का उपयोग करता है, मेरा मानना ​​है।
जॉर्ज डब्ल्यू मित्तग

4
@ टेक्स्ट्रॉन: मैं सामान्य रूप से सहमत हूं, लेकिन गो को विशेष रूप से गति को ध्यान में रखते हुए बनाया गया था, जैसे कि, "परिणामस्वरूप प्रोग्राम लगभग तुलनात्मक सी या सी ++ कोड के रूप में जल्दी से चलते हैं।"
शास्त्री

4
आपका प्रश्न बहुत अधिक मानता है: "अधिकांश उत्तर गोल गप्पे की आंतरिक ढिलाई से इनकार करते हैं" एक प्रश्न में उपयोग के लिए एक गलत वाक्यांश है। क्या आपके पास पूछने के लिए सवाल है, या बनाने के लिए एक बयान है? कृपया अपनी त्रुटि समझने के लिए c2.com/cgi/wiki?HostileStudent देखें ।
क्रिस

जवाबों:


102

6g और 8g संकलक विशेष रूप से अनुकूलन नहीं कर रहे हैं, इसलिए उनके द्वारा उत्पादित कोड विशेष रूप से तेज़ नहीं है।

वे खुद को तेज़ी से चलाने और कोड का उत्पादन करने के लिए डिज़ाइन किए गए हैं जो ठीक है (अनुकूलन का एक सा है)। gccgoGCC के मौजूदा अनुकूलन पास का उपयोग करता है, और C के साथ अधिक सार्थक तुलना प्रदान कर सकता है, लेकिन gccgo अभी तक पूर्ण नहीं है।

बेंचमार्क आंकड़े कार्यान्वयन की गुणवत्ता के बारे में पूरी तरह से हैं। उनके पास भाषा के साथ ऐसा करने के लिए एक बड़ी राशि नहीं है, इस सीमा को छोड़कर कि कार्यान्वयन रनटाइम सहायक भाषा सुविधाओं को खर्च करता है जो बेंचमार्क की वास्तव में आवश्यकता नहीं है। अधिकांश संकलित भाषाओं में एक पर्याप्त चतुर कंपाइलर थ्योरी स्ट्रिप में हो सकता है, जिसकी आवश्यकता नहीं है, लेकिन एक बिंदु आता है जहां आप डेमो में हेराफेरी कर रहे हैं, क्योंकि भाषा के बहुत कम वास्तविक उपयोगकर्ता ऐसे प्रोग्राम लिखेंगे जो उस सुविधा का उपयोग नहीं करते हैं । चीजों को पूरी तरह से हटाने के बिना रास्ते से बाहर ले जाना (जैसे कि जेआईटी-संकलित जावा में आभासी कॉल गंतव्यों की भविष्यवाणी करना) मुश्किल हो जाता है।

एफडब्ल्यूआईडब्ल्यू, गो के साथ मेरा अपना बहुत ही तुच्छ परीक्षण है जब मैं इसे देख रहा था (मूल रूप से पूर्णांक का एक लूप, मूल रूप से), gccgo ने सी gcc -O0और gcc -O2समतुल्य सी के लिए सीमा के तेज अंत की ओर कोड का उत्पादन किया है । स्वाभाविक रूप से धीमा नहीं है, लेकिन कंपाइलर अभी तक सब कुछ नहीं करते हैं। 10 मिनट पुरानी एक भाषा के लिए शायद ही कोई आश्चर्य हो।


7
इसके अलावा, यह हो सकता है कि कंप्यूटर भाषा बेंचमार्क गेम में जाने वाले प्रोग्राम सी और जावा के रूप में अनुकूलित न हों।
el.pescado

Gcc -O0 और gcc -O3 के बीच क्या है? वहाँ भी इरादा है कि संकलक "सब कुछ करेंगे"?
इगौई

@igouy: ठीक है, मुझे पूरा यकीन है कि एक इरादा gccgo कचरा संग्रह करेगा, जो वर्तमान में ऐसा नहीं है। जी कंपाइलरों में जाने के लिए अभी भी कुछ विशेषताएं हैं, उदाहरण के लिए वे वर्तमान में मेजबान थ्रेड्स का उपयोग विशेष रूप से अच्छी तरह से नहीं करते हैं (विशेष रूप से, गोरोइनटाइन शेड्यूलर पूर्व-खाली नहीं है)। इसके अलावा, मुझे Google की योजनाओं के बारे में नहीं पता है, कि क्या जी कंपाइलर्स कभी भी जमकर अनुकूलन करेंगे, या यदि केवल संक्षिप्त विवरण होगा।
स्टीव जेसोप

1
@xitrium: मुझे लगता है कि गो के लिए इरादा यह है कि सहकारिता को शेड्यूल करने के लिए कार्यान्वयन की आवश्यकता नहीं होनी चाहिए, यदि वे चाहें तो पूर्व-खाली कर सकते हैं। उदाहरण के लिए देखें कोड. google.com/p/go/issues/detail?id=543 , जिसे "बकवास के रूप में बंद नहीं किया गया है, इस तथाकथित बग को ठीक करना गो भाषा की परिभाषा का खंडन करेगा", जो कि यह होना चाहिए गो कार्यान्वयन पूर्व-खाली करने के लिए मना किया जाता है :-) इस मुद्दे को इस तथ्य से जटिल किया गया था कि डिफ़ॉल्ट रूप से गो केवल एक ही मेजबान थ्रेड का उपयोग करता था, चाहे कितने गोरोनेट चल रहे हों।
स्टीव जेसोप

6
उत्तर अब तक थोड़ा पुराना हो सकता है। हाल ही में, गो 1.1 का पहला बीटा जारी किया गया था , वे कहते हैं कि संकलित कार्यक्रमों का प्रदर्शन लगभग 30% से 40% तक बढ़ जाता है। कृपया कोई इन परीक्षणों को फिर से करें।
फ़ूज

51

गो FAQ के अगले रिलीज़ में , निम्नलिखित के समान कुछ दिखाई देना चाहिए।

प्रदर्शन

बेंचमार्क एक्स पर खराब प्रदर्शन क्यों होता है?

गो के डिजाइन लक्ष्यों में से एक तुलनीय कार्यक्रमों के लिए सी के प्रदर्शन का दृष्टिकोण है, फिर भी कुछ बेंचमार्क पर यह काफी खराब करता है, जिसमें परीक्षण / बेंच में कई शामिल हैं। सबसे धीमी लाइब्रेरियों पर निर्भर करता है जिसके लिए तुलनात्मक प्रदर्शन के संस्करण गो में उपलब्ध नहीं हैं। उदाहरण के लिए, पिडिजिट्स एक बहु-सटीक गणित पैकेज पर निर्भर करता है, और सी संस्करण, गो के विपरीत, जीएमपी का उपयोग करते हैं (जो कि अनुकूलित कोडांतरक में लिखा गया है)। बेंचमार्क जो नियमित अभिव्यक्तियों (उदाहरण के लिए रेगेक्स-डीएनए) पर निर्भर करते हैं, अनिवार्य रूप से गो के स्टॉपगैप रेगेक्सप पैकेज की तुलना पीसीआर जैसे परिपक्व, अत्यधिक अनुकूलित नियमित अभिव्यक्ति पुस्तकालयों से कर रहे हैं।

बेंचमार्क गेम व्यापक ट्यूनिंग द्वारा जीते जाते हैं और अधिकांश बेंचमार्क के गो संस्करणों पर ध्यान देने की आवश्यकता होती है। यदि आप तुलनीय C और Go प्रोग्राम्स को मापते हैं (रिवर्स-सप्लीमेंट एक उदाहरण है), तो आप देखेंगे कि दो भाषाएँ कच्चे प्रदर्शन में बहुत करीब हैं, जितना कि यह सूट इंगित करेगा।

फिर भी, सुधार की गुंजाइश है। कंपाइलर अच्छे हैं, लेकिन बेहतर हो सकते हैं, कई पुस्तकालयों को प्रमुख प्रदर्शन कार्य की आवश्यकता होती है, और कचरा संग्रहकर्ता अभी तक तेजी से नहीं है (भले ही यह हो, अनावश्यक कचरा उत्पन्न नहीं करने का ध्यान रखना एक बड़ा प्रभाव हो सकता है)।

और यहाँ हाल ही में मेलिंग सूची धागे से कंप्यूटर बेंचमार्क गेम पर कुछ और विवरण हैं ।

कचरा संग्रह और gccgo में प्रदर्शन (1)

कचरा संग्रह और gccgo में प्रदर्शन (2)

यह ध्यान रखना महत्वपूर्ण है कि कंप्यूटर बेंचमार्क गेम सिर्फ एक गेम है। प्रदर्शन माप और क्षमता नियोजन में अनुभव वाले लोग यथार्थवादी और वास्तविक कार्यभार की तरह ध्यान से मेल खाते हैं; वे खेल नहीं खेलते हैं।


1
और यहाँ है कि एक ही धागे से कुछ विवरण आपके द्वारा बहिष्कृत किए कि - groups.google.com/group/golang-nuts/msg/2e568d2888970308
igouy

3
यह ध्यान दें कि "मानक एक crock रहे हैं" के लिए महत्वपूर्ण है - न केवल मानक मानक खेल के रूप में प्रकाशित - shootout.alioth.debian.org/flawed-benchmarks.php
igouy

18
(और हर कोई ...) निश्चित रूप से यह एक "खेल" है , लेकिन जब मैं देखता हूं कि गो इन बेंचमार्क पर सबसे तेज से केवल दो गुना धीमा है, तो मेरा पहला प्रभाव "वाह, गो फास्ट लगता है" , क्योंकि मुझे पता है कि ये बेंचमार्क हैं त्रुटिपूर्ण। इसके विपरीत, जब मैं रूबी को सबसे तेज से 65 गुना धीमा देखता हूं, तो मुझे लगता है कि मैं "अपने अगले समवर्ती-संख्यात्मक प्रयास के लिए रूबी का उपयोग नहीं करने वाला हूं" । तो यह एक "खेल" हो सकता है, लेकिन इसमें कुछ सच्चाई है यदि आप इसे नमक के दाने के साथ लेते हैं।
SyntaxT3rr0r

क्षमता योजना का एक बहुत महत्वपूर्ण पहलू है: लागत। चाहे आपको एक्स बॉक्स की आवश्यकता होगी या 2 * एक्स अंत में एक बड़ा अंतर बनाता है। और चूंकि कोई भी अनुमान नहीं लगा सकता है कि भविष्य में उन पर क्या चल रहा है, सबसे अच्छा शर्त विभिन्न कार्यभार पर एक नज़र रखना है। मैंने इनमें से कुछ कार्यान्वयन की जाँच की है और उन्हें ज्यादातर ठीक पाया है। मुझे लगता है कि परिणामों का उपयोग अनुमानों के आधार के रूप में किया जा सकता है।
अगोस्तन होर्वाथ

आम तौर पर, वास्तविक विश्व प्रणालियां IO द्वारा सीपीयू द्वारा नहीं विवश होती हैं। इसलिए, चाहे गो 2x हो या 5x धीमा हो, क्षमता नियोजन के रूप में फेलओवर, लोड बैलेंसिंग, कैशिंग, डेटाबेस टोपोलॉजी और इसी तरह के अंतर के रूप में बहुत मुश्किल है। यही कारण है कि YouTube के पैमाने पर ऐप अपने कई सिस्टम को पायथन में चलाने का जोखिम उठा सकते हैं।
सुजॉय गुप्ता

34

मेरा उत्तर उतना तकनीकी नहीं है जितना कि बाकी सभी का, लेकिन मुझे लगता है कि यह अभी भी प्रासंगिक है। मैंने कंप्यूटर बेंचमार्क गेम पर वही बेंचमार्क देखा जब मैंने गो सीखना शुरू करने का फैसला किया। लेकिन मैं ईमानदारी से सोचता हूं कि ये सभी सिंथेटिक बेंचमार्क यह तय करने के मामले में बेकार हैं कि क्या गो आपके लिए काफी तेज है।

मैंने हाल ही में Tornado + TornadIO + ZMQ का उपयोग करके पायथन में एक संदेश सर्वर लिखा था और अपने पहले गो प्रोजेक्ट के लिए मैंने गो में सर्वर को फिर से लिखने का फैसला किया। अब तक, सर्वर को पायथन संस्करण के समान कार्यक्षमता के लिए मिल गया है, मेरे परीक्षण मुझे गो कार्यक्रम में 4.7x गति वृद्धि के बारे में दिखा रहे हैं। ध्यान रहे, मैं केवल एक सप्ताह के लिए गो में कोडिंग कर रहा हूं, और मैं 5 वर्षों से पायथन में कोडिंग कर रहा हूं।

गो केवल तेजी से आगे बढ़ने वाला है क्योंकि वे इस पर काम करना जारी रखते हैं, और मुझे लगता है कि यह वास्तव में नीचे आता है कि यह वास्तविक दुनिया के आवेदन में कैसे प्रदर्शन करता है और छोटे कम्प्यूटेशनल बेंचमार्क नहीं। मेरे लिए, जाहिरा तौर पर मैं पायथन में जो कुछ भी पैदा कर सकता था उससे अधिक कुशल कार्यक्रम का परिणाम था। इस सवाल का जवाब मैं यही लेता हूं।


3
आपको कितना धीमा लगता है कि आप पायथन की तुलना में गो कोड लिख रहे होंगे?
एरिक इंगहेम

7
@ अदमस्मिथ - मैं कहूंगा कि मैं पायथन की तुलना में गो कोड अधिक धीरे-धीरे लिखूंगा क्योंकि मैं 7 साल से अजगर का कोडिंग कर रहा हूं और केवल थोड़ा गो। लेकिन गो बनाम अन्य सांख्यिकीय रूप से संकलित भाषाओं के संदर्भ में, मैं दांव लगाता हूं कि मैं दूसरों की तुलना में तेजी से लिखूंगा। व्यक्तिगत रूप से, मुझे लगता है कि सी और सी ++ के बीच की गति के साथ अजगर की सादगी के सबसे करीब की बात है
जैदी

5
मेरी भी ऐसी ही कहानी है। मैंने अभी Go सीखना शुरू किया, और बेंचमार्क गेम के अनुसार, जावास्क्रिप्ट V8 की तुलना में Go SL SLOWER है। पता चलता है कि मेरा प्रोग्राम जो बाइनरी ऑपरेशन गहन है, अत्यधिक अनुकूलित वी 8 वीएम की तुलना में बिना गोद लिए हुए कोड के साथ 10x तेज चलता है। कई ऑपरेशनों में C की तुलना में गो धीमी हो सकती है, हालाँकि कोई भी व्यक्ति C. में वेबसाइट नहीं लिख रहा है। Go पहले से ही पूरी तरह से व्यवहार्य विकल्प है, और केवल बेहतर होना चाहिए, क्योंकि नई लाइब्रेरी, फ्रेमवर्क और टूल पॉप अप होते हैं।
अगर __name__

1
@ user962247 यह एक पागल और गलत कंबल बयान है। मैं वर्षों से गो लिख रहा हूं और यह तेजी से धधक रहा है। कोई भी दावा नहीं करता कि यह हर सिंथेटिक बेंचमार्क पर सी / सी ++ / जावा को हरा देगा। लेकिन यह कुछ पर जीतता है (बेंचमार्क गेम साइट देखें)। इसे किसी ऐसे व्यक्ति से लें जो वास्तव में उत्पादन गो कोड लिख रहा है। यह तेज और उत्पादक है।
जीडी


6

चीजें बदल गई।

मुझे लगता है कि आपके प्रश्न का वर्तमान सही उत्तर यह धारणा है कि गो धीमी है। आपकी जाँच के समय आपका निर्णय न्यायसंगत था, लेकिन प्रदर्शन के मामले में तब से बहुत कुछ हासिल हुआ है। अब, यह अभी भी सी के रूप में तेजी से नहीं है, लेकिन सामान्य अर्थ में 10x धीमा होने के करीब नहीं है।

कंप्यूटर भाषा बेंचमार्क खेल

इस लेखन के समय:

source  secs    KB      gz      cpu     cpu load

reverse-complement
1.167x
Go      0.49    88,320  1278    0.84    30% 28% 98% 34%
C gcc   0.42    145,900 812     0.57    0% 26% 20% 100%

pidigits
1.21x
Go      2.10    8,084   603 2.10    0% 100% 1% 1%
C gcc   1.73    1,992   448 1.73    1% 100% 1% 0%

fasta
1.45x
Go      1.97    3,456   1344    5.76    76% 71% 74% 73%
C gcc   1.36    2,800   1993    5.26    96% 97% 100% 97%

regex-dna
1.64x
Go      3.89    369,380 1229    8.29    43% 53% 61% 82%
C gcc   2.43    339,000 2579    5.68    46% 70% 51% 72%

fannkuch-redux
1.72x
Go      15.59   952 900 62.08   100% 100% 100% 100%
C gcc   9.07    1,576   910 35.43   100% 99% 98% 94%

spectral-norm
2x
Go      3.96    2,412   548 15.73   99% 99% 100% 99%
C gcc   1.98    1,776   1139    7.87    99% 99% 100% 99%

n-body
2.27x
Go      21.73   952 1310    21.73   0% 100% 1% 2%
C gcc   9.56    1,000   1490    9.56    1% 100% 1% 1%

k-nucleotide
2.40x
Go      15.48   149,276 1582    54.68   88% 97% 90% 79%
C gcc   6.46    130,076 1500    17.06   51% 37% 89% 88%

mandelbrot
3.19x
Go      5.68    30,756  894 22.56   100% 100% 99% 99%
C gcc   1.78    29,792  911 7.03    100% 99% 99% 98%

हालांकि, यह बाइनरी ट्री बेंचमार्क पर क्रूरता से पीड़ित होता है:

binary-trees
12.16x
Go      39.88   361,208 688 152.12  96% 95% 96% 96%
C gcc   3.28    156,780 906 10.12   91% 77% 59% 83%

यह अब जावा के बराबर है, लेकिन गो को स्पष्ट रूप से जावा की तुलना में तेज नहीं बनाया गया है, जबकि समान चीजों (सर्वर साइड नेटवर्किंग) के लिए उपयोग किया जा रहा है?
मैक्सबी

1
@MaxB नहीं यह जावा की तुलना में तेज़ होने के लक्ष्य के साथ नहीं बनाया गया था। यह अच्छा प्रदर्शन करने के लक्ष्य के साथ बनाया गया था, सी ++ की तुलना में तेजी से संकलन, और डेवलपर्स को अधिक उत्पादक बनाने के लिए आसान और देशी संगामना। अन्य भाषाओं की रनटाइम गति को पीटना एक ड्राइविंग कारक नहीं था।
१ .

5

सीपीयू साइकल उपयोग के बारे में गो की इतनी अच्छी दक्षता नहीं होने के बावजूद, गो कंसर्टिबिलिटी मॉडल जावा में थ्रेड मॉडल की तुलना में बहुत तेज है, उदाहरण के लिए, और सी ++ थ्रेड मॉडल के लिए तुलनीय हो सकता है।

ध्यान दें कि थ्रेड-रिंग बेंचमार्क में , गो जावा से 16x तेज था । उसी परिदृश्य में गो सीएसपी लगभग C ++ के बराबर था, लेकिन 4x कम मेमोरी का उपयोग कर रहा था।

गो भाषा की महान शक्ति इसका संगोष्ठी मॉडल है, 70 के दशक में टोनी होरे द्वारा निर्दिष्ट क्रमिक प्रक्रियाओं, सीएसपी का संचार करना, अत्यधिक समवर्ती आवश्यकताओं के लिए लागू करने और फिट होने के लिए सरल होना।


2

दो बुनियादी कारण हैं कि जावा गो और सी ++ से तेज है, और कई मामलों में सी से तेज हो सकता है:

1) JIT कंपाइलर। यह रनटाइम प्रोफाइल के आधार पर, OO कक्षाओं के साथ कई स्तरों के माध्यम से वर्चुअल फ़ंक्शन कॉल को इनलाइन कर सकता है। यह एक संकलित भाषा में संभव नहीं है (हालांकि रिकॉर्ड किए गए प्रोफ़ाइल के आधार पर नया पुन: संकलन मदद कर सकता है)। अधिकांश बेंचमार्क के लिए यह बहुत महत्वपूर्ण है जिसमें दोहराए गए एल्गोरिदम शामिल हैं।

2) जीसी। मॉलॉक की तुलना में जीसी आधारित मेमोरी आवंटन लगभग मुफ्त है। और 'फ्री' पेनल्टी को पूरे रनटाइम के दौरान परिशोधन किया जा सकता है - अक्सर छोड़ दिया जाता है क्योंकि प्रोग्राम को कचरा इकट्ठा करने से पहले समाप्त करने की आवश्यकता होती है।

जीसी / जेवीएम को कुशल बनाने वाले अत्यंत प्रतिभाशाली डेवलपर्स के सैकड़ों (हजारों) हैं। यह सोचकर कि आप "उन सभी से बेहतर कोड कर सकते हैं" एक मूर्खतापूर्ण है। यह अपने दिल में एक मानव अहंकार समस्या है - मानव के पास यह स्वीकार करने में कठिन समय है कि प्रतिभाशाली मनुष्यों द्वारा उचित प्रशिक्षण के साथ, कंप्यूटर उन मनुष्यों की तुलना में बेहतर प्रदर्शन करने वाला है जो इसे क्रमादेशित करते हैं।

Btw, C ++, C के समान तेज़ हो सकता है यदि आप उपयोग नहीं करते हैं और OO सुविधाओं का उपयोग करते हैं, लेकिन तब आप C से शुरू करने के लिए सिर्फ प्रोग्रामिंग में बहुत करीब हैं।

सबसे महत्वपूर्ण बात, इन परीक्षणों में "गति अंतर" आमतौर पर अर्थहीन होते हैं। IO लागत प्रदर्शन अंतर से अधिक परिमाण के आदेश हैं, और इसलिए IO लागत को कम करने वाले उचित डिजाइन हमेशा एक व्याख्या भाषा में जीतते हैं। बहुत कम सिस्टम सीपीयू बाउंड होते हैं।

अंतिम नोट के रूप में, लोग "कंप्यूटर भाषा बेंचमार्क गेम" को "वैज्ञानिक उपाय" के रूप में संदर्भित करते हैं। परीक्षण पूरी तरह से त्रुटिपूर्ण हैं, उदाहरण के लिए, यदि आप nbody के लिए जावा परीक्षण देखते हैं। जब मैं एक ही ओएस / हार्डवेयर पर परीक्षण चलाता हूं, तो मुझे जावा के लिए लगभग 7.6 सेकंड मिलते हैं, और सी के लिए 4.7 सेकंड - जो उचित है - परीक्षण रिपोर्ट 4x धीमे नहीं। यह साइट ट्रैफ़िक उत्पन्न करने के लिए डिज़ाइन किया गया क्लिक-फ़ाइट, फ़ेक न्यूज़ है।

अंतिम, अंतिम नोट के रूप में ... मैंने गो का उपयोग करके परीक्षण चलाए, और यह 7.9 सेकंड था। तथ्य यह है कि जब आप गो पर क्लिक करते हैं, तो यह जावा से तुलना करता है, और जब आप जावा पर क्लिक करते हैं तो यह सी से तुलना करता है, किसी भी गंभीर इंजीनियर को लाल झंडा होना चाहिए।

जावा, गो और सी ++ की वास्तविक दुनिया की तुलना के लिए https://www.biorxiv.org/content/10.1101/558056v1 स्पॉइलर अलर्ट देखें , जावा कच्चे प्रदर्शन में शीर्ष पर आता है, साथ में संयुक्त मेमोरी उपयोग के साथ शीर्ष पर आता है। और दीवार का समय।


गलत। C ++ IS C जितना तेज़ है, विशेषकर जब आप OOP का उपयोग करते हैं, तो यह उसका जन्म प्रमाण पत्र है। शून्य अतिरिक्त सीमा याद के साथ किसी भी समय पूर्णता अवधि के बिना (कक्षाओं में) के रूप में अधिक अमूर्तता। यदि आप नहीं जानते कि, जावा, सी #, गो, अजगर, एट

// Btw, C ++ उतना ही तेज हो सकता है यदि आप O और // सुविधाओं का उपयोग नहीं करते हैं, लेकिन तब आप C से प्रोग्रामिंग शुरू करने के लिए बहुत करीब हैं। यदि आप कहते हैं कि, आपके पास c ++ के बारे में बहुत कम सुराग हैं, तो खुद के लिए, इसका उपयोग न करें। c और c ++ जादू और मध्ययुगीन दिमाग से नफरत करते हैं, प्रकृति में अंधविश्वासी, जैसे ओह मैंने सुना है कि, इसे इंटरनेट पर पढ़ें, यह सच होना चाहिए ... c और c ++ से दूर रहें, वे आपको मेरे दोस्त को वापस भेज देंगे (ईमानदार सलाह)

c, c ++ का पूर्वज है। बहुत से लोग अभी भी इसका उपयोग करते हैं ... c ++ एक बेहतर सी है, जहां आप कीमत चुकाए बिना अधिक कर सकते हैं। जावा, सी # और गो लेखकों को यह नहीं मिला, ठीक है, बेशक, उन्होंने किया, लेकिन वे इसके बारे में क्या कर सकते हैं? मौजूदा (c) कोड के साथ संगत होने के बारे में भी। सी कोड के वास्तविक जीवन महासागरों! अजगर एक अच्छा खिलौना है, आनंद लें, काश, वे इसे सही

>> जावा प्रोग्राम के लिए 30% पर CPU उपयोग को दर्शाता है << नहीं- "1% 0% 0% 100%"।
इगौई

1
@igouy मैंने स्वीकार किया कि यह एक त्रुटि है जो मैंने संभवतः की है - जब मैंने लोड देखा, तो मैं 'सिस्टम लोड' शब्दों में व्याख्या कर रहा था, और यह मानते हुए, उपयोगकर्ता / प्रणाली / io / निष्क्रिय - मेरी गलती है, और यह एक पर्याप्त था।
रोबर्ट ने 23

1

मुझे लगता है कि अक्सर एक अनदेखी तथ्य यह है कि, JIT संकलन विशेष रूप से (रनटाइम) देर से बंधे कार्यों या विधियों के लिए स्थैतिक संकलन हो सकता है। हॉटस्पॉट JIT RUNTIME पर तय करता है कि कौन से तरीकों को इनलाइन किया जाता है, यहां तक ​​कि वर्तमान में चल रहे सीपीयू के कैश आकार / आर्किटेक्चर के लिए डेटा लेआउट को भी समायोजित कर सकता है। सामान्य रूप से C / C ++ हार्डवेयर तक सीधी पहुंच बनाकर (और कुल मिलाकर अभी भी बेहतर प्रदर्शन करेगा)। गो के लिए चीजें C की तुलना में इसके उच्च-स्तर के रूप में भिन्न दिख सकती हैं, लेकिन वर्तमान में रनटाइम ऑप्टिमाइज़ेशन सिस्टम / कंपाइलर का अभाव है। मेरी आंत मुझे बताती है, गो तो तेज़ हो सकती है क्योंकि जावा गो पॉइंटर को लागू करने के लिए लागू नहीं करता है और इससे बेहतर डेटा संरचना को बढ़ावा मिलता है स्थानीयता + को कम आवंटन की आवश्यकता होती है।


1

तथ्य की बात के रूप में, गो न केवल डिजाइन के समय में सुरुचिपूर्ण और कुशल है, बल्कि रन-टाइम में सुपर परफॉर्मेंट भी है। कुंजी सही ऑपरेटिंग सिस्टम यानी LINUX का उपयोग करना है। विंडोज और मैक ओएस के तहत प्रदर्शन प्रोफाइलिंग परिणाम एक बेहतर शब्द की कमी के लिए, एक या दो आदेश हीनता के हैं।


0

लिनक्स के तहत, गो रनटाइम सुपर फास्ट है, सी / सी ++ के साथ पूरी तरह से तुलनीय है। विंडोज़ और यूनिक्स के तहत गो रनटाइम एक ही लीग में नहीं हैं

जावा के साथ तुलना इतनी महत्वपूर्ण नहीं है, जाओ प्रणाली और अनुप्रयोग विकास दोनों के लिए है (क्योंकि जावा केवल अनुप्रयोग विकास के लिए नीले कॉलर की तरह है)। विवरणों में दर्ज नहीं होगा, लेकिन जब कुबेरनेट जैसी चीजें लिखी जाती हैं, तो आपको एहसास होता है कि यह एक उद्यम नहीं है, जो मित्रवत खिलौना है

मुझे याद नहीं कि आप जिस ज़िक्र का ज़िक्र करते हैं, उसके बारे में एक बार भी गूगल का ज़िक्र न हो। गो अच्छी तरह से डिजाइन, सरल, सुरुचिपूर्ण और कुशल डिजाइनिंग सिस्टम और एप्लिकेशन स्तर के कार्यक्रमों के लिए है, इसमें पॉइंटर्स, कुशल मेमोरी आवंटन और डीलक्लोकेशन है, ओह से उत्पन्न होने वाली जटिलताओं से बचा जाता है ताकि मिस-यूज़ कार्यान्वयन विरासत के लिए आसान हो, जिससे आपको सह-दिनचर्या और अन्य आधुनिक मिलें समय और बजट में उच्च प्रदर्शन अनुप्रयोगों को लिखने के तरीके। फिर से जाना, linux के तहत सुपर फास्ट है, जो कि वास्तव में इसे बनाया गया था (बहुत खुश है कि यह करता है)


-4

जावा और सी दोनों अपने डेटा और विधि (फ़ंक्शन) परिभाषाओं के साथ अधिक स्पष्ट हैं। सी को सांख्यिकीय रूप से टाइप किया गया है, और जावा अपने उत्तराधिकार मॉडल के साथ कम है। इसका मतलब है कि संकलन के दौरान डेटा को जिस तरह से संभाला जाएगा वह बहुत अधिक परिभाषित है।

गो अपने डेटा और फ़ंक्शन परिभाषाओं के साथ अधिक अंतर्निहित है। अंतर्निहित कार्य प्रकृति में अधिक सामान्य हैं, और एक प्रकार की पदानुक्रम (जैसे जावा या सी ++) की कमी गो को एक त्वरित नुकसान देती है।

ध्यान रखें कि गो भाषा के लिए Google का लक्ष्य निष्पादन की गति और कोडिंग की गति के बीच एक स्वीकार्य समझौता है। मुझे लगता है कि वे अपने शुरुआती प्रयास में एक अच्छा मीठा स्थान मार रहे हैं, और चीजें केवल बेहतर होंगी क्योंकि अधिक काम किया जाता है।

यदि आप गो की तुलना अधिक गतिशील रूप से टाइप की जाने वाली भाषाओं से करते हैं, जिसका मुख्य लाभ कोडिंग की गति है, तो आपको गो का निष्पादन गति लाभ दिखाई देगा। गो पर्ल से 8 गुना तेज है, और आपके द्वारा उपयोग किए गए बेंचमार्क पर रूबी 1.9 और पायथन 3 से 6 गुना तेज है।

वैसे भी पूछने के लिए बेहतर सवाल प्रोग्रामिंग की गति बनाम निष्पादन की गति में एक अच्छा समझौता है? मेरा जवाब हां में होना और यह बेहतर होना चाहिए।


20
"एक प्रकार की पदानुक्रम की कमी (जैसे जावा या C ++) गो को एक गति नुकसान देता है" -क्यों?
एरिक कप्लून

6
"गो अपने डेटा और फ़ंक्शन परिभाषाओं के साथ अधिक अंतर्निहित है।" गलत। क्या आप इसका मतलब है कि इसके बारे में पता लगाए बिना कैसे तरीके लागू कर सकते हैं? संकलक प्रकार - इंटरफ़ेस सदस्यता का पता लगाता है। यह उपवास है। "कार्य में निर्मित प्रकृति में अधिक सामान्य हैं" नहीं, निर्मित हैं, जैसे कि सब कुछ, संकलित। C ++ टेम्प्लेट के साथ भी यही होता है। "एक प्रकार की पदानुक्रम की कमी (जैसे जावा या C ++) गो को एक गति नुकसान देती है" - गलत, एक प्रकार की पदानुक्रम का रनटाइम निष्पादन से कोई लेना-देना नहीं है।
मैल्कम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.