क्या पायथन C ++ से अधिक तेज और हल्का है? [बन्द है]


89

मैंने हमेशा सोचा है कि पायथन के फायदे कोड पठनीयता और विकास की गति हैं, लेकिन समय और स्मृति उपयोग सी ++ के रूप में अच्छे नहीं थे।

इन आँकड़ों ने मुझे बहुत मुश्किल से मारा।

आपका अनुभव आपको पायथन बनाम सी ++ समय और स्मृति उपयोग के बारे में क्या बताता है?


18
इसलिए पाइथन इन मामलों में से अधिकांश के लिए धीमा है और अधिक रैम का उपयोग करता है लेकिन स्रोत छोटा है। वास्तव में समस्या क्या है?
नर्सरी

2
मुझे लगता है कि मैंने परिणामों की गलत व्याख्या की।
एलेक्स

6
वास्तव में क्या दिलचस्प है कि C ++ परीक्षण अभी भी C से बेहतर हैं!
gbjbaanb

9
@ जीबीजैनब: मुझे आश्चर्य नहीं है। C ++ में बहुत सी सुविधा जोड़ी गई है जो संभावित तेज कोड को सक्षम करती है। यदि आप जानते हैं कि आप क्या कर रहे हैं, सी ++ हास्यास्पद रूप से कुशल हो सकता है, तो सी से अधिक (बेशक, सी ++ में कुछ विशेषताएं भी शामिल हैं जो प्रदर्शन को चोट पहुंचाती हैं, लेकिन आपको उनका उपयोग करने की आवश्यकता नहीं है)। लेकिन आम धारणा है कि "C ++ से तेज है" गलत है। (और यह सवाल पहली जगह में बहुत सार्थक नहीं है)
jalf

1
लिंक मर चुका है
अरन

जवाबों:


235

मुझे लगता है कि आप उन आंकड़ों को गलत तरीके से पढ़ रहे हैं। वे दिखाते हैं कि पायथन C ++ से लगभग 400 गुना धीमा है और एक एकल मामले के अपवाद के साथ, पायथन एक मेमोरी हॉग के अधिक है। जब यह स्रोत आकार की बात आती है, तो पायथन फ्लैट से बाहर जीतता है।

पायथन के साथ मेरे अनुभव एक ही निश्चित प्रवृत्ति दिखाते हैं कि किसी भी गंभीर संख्या में क्रंचिंग करते समय पायथन C ++ की तुलना में 10 से 100 गुना धीमा होता है। इसके कई कारण हैं, जिनमें से प्रमुख हैं: ए) पायथन की व्याख्या की जाती है, जबकि सी ++ संकलित है; बी) पायथन में कोई आदिम नहीं है, बिलियन प्रकार (इंट, फ्लोट, आदि) सहित सभी चीजें ऑब्जेक्ट हैं; ग) एक पायथन सूची विभिन्न प्रकार की वस्तुओं को पकड़ सकती है, इसलिए प्रत्येक प्रविष्टि को अपने प्रकार के बारे में अतिरिक्त डेटा संग्रहीत करना होगा। ये सभी गंभीर रूप से रनटाइम और मेमोरी खपत दोनों में बाधा डालते हैं।

हालांकि यह पायथन की अनदेखी का कोई कारण नहीं है। बहुत सारे सॉफ्टवेयर को 100 समय के धीमापन कारक के साथ भी अधिक समय या मेमोरी की आवश्यकता नहीं होती है। विकास लागत वह है जहां अजगर सरल और संक्षिप्त शैली के साथ जीतता है। विकास लागत पर यह सुधार अक्सर अतिरिक्त सीपीयू और स्मृति संसाधनों की लागत से आगे निकल जाता है। जब यह नहीं होता है, तब C ++ जीतता है।


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

3
मैंने यह सुनिश्चित किया कि आपने क्या कहा और यह साबित करने के लिए एक लिंक: blog.dhananjaynene.com/2008/07/…
ucefkh

2
के बारे में: सी) एक पायथन सूची विभिन्न प्रकार की वस्तुओं को पकड़ सकती है, इसलिए प्रत्येक प्रविष्टि को अपने प्रकार के बारे में अतिरिक्त डेटा संग्रहीत करना होगा। अजगर सूची वास्तव में वस्तुओं की ओर इशारा करती है। अजगर में यह वह मान है जो जानता है कि यह टाइप है, जबकि चर केवल "जेनेरिक मूल्य ऑब्जेक्ट" के लिए एक संकेतक है (इसलिए यहां तक ​​कि संख्याएं अपरिवर्तनीय हैं)। इसलिए सूचियाँ सामग्री के प्रकारों को संग्रहीत नहीं कर रही हैं - केवल संकेत। आप मेमोरी ओवरहेड के बारे में सही हैं, हालांकि - अजगर को किसी भी प्रकार के मूल्यों के लिए प्रकार और अन्य संदर्भ को संग्रहीत करना होगा।
एलेक्स

अगर आप cpython के बारे में बात करते हैं..तो हाँ, लेकिन pypy ज्यादातर मामलों में बहुत तेज है (जावा के साथ तुलना, जावा की 1/3 गति, मुझे लगता है), अजगर के सबसेट लगभग कभी भी तेजी से c ++ (shedskin देखें)
Quonux

1
@JustinPeel मैं सवाल करता हूँ कि क्या यह सच है। का व्यापक उपयोग करते हुए numpyऔर scipy, एक बड़े pythonकोड बेस में शुद्ध अजगर में बहुत सारे कोड होने की संभावना है, जिससे चीजें धीमी हो जाती हैं C++। एक अजगर स्क्रिप्ट एक स्क्रिप्ट की गति के करीब पहुंचती है C++क्योंकि उसके Cकोड का प्रतिशत जाता है 100, जिस बिंदु पर यह अब अजगर स्क्रिप्ट नहीं है। अजगर दूर ले जा रहा है, निश्चित रूप से, लेकिन इसलिए नहीं कि यह उतना ही तेज़ है C++- क्योंकि इसका उपयोग करना आसान है।
dbliss

132

शूटआउट पर पायथन के सभी सबसे धीमे (> 100x) वैज्ञानिक ऑपरेशन हैं जिनमें उच्च GFlop / s गिनती की आवश्यकता होती है। आप वैसे भी उन लोगों के लिए अजगर का उपयोग नहीं करना चाहिए। अजगर का उपयोग करने का सही तरीका एक मॉड्यूल को आयात करना है जो उन गणनाओं को करता है, और फिर अपने परिवार के साथ एक आरामदायक दोपहर है। यह अजगर का तरीका है :)


3
आजकल कई पायथन-टू-सी ++ कंपाइलर हैं , इसलिए कुछ मामलों में पायथन सी ++ जितना तेज हो सकता है।
एंडरसन ग्रीन

26

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

आपका सवाल क्या हैं?


मैं सिर्फ बेंचमार्क के परिणामों से भ्रमित था। पता चला कि मैंने उनकी गलत व्याख्या की।
एलेक्स

16

स्रोत आकार वास्तव में मापने के लिए एक समझदार चीज नहीं है। उदाहरण के लिए, निम्नलिखित शेल स्क्रिप्ट:

cat foobar

अपने पाइथन या C ++ समकक्षों की तुलना में बहुत कम है।


35
और बहुत आसान है कि लंबे समय तक पायथन या सी ++ संस्करण बनाए रखें। मैं तर्क देता हूं कि स्रोत कोड का आकार मायने रखता है, और कुछ सरल कार्यों के लिए, टोल शेल स्क्रिप्ट अच्छी हैं।
एस.लॉट

मेरा यह भी मानना ​​है कि स्रोत कोड का आकार बहुत मायने रखता है, और कुछ कार्यों के लिए, बैश काम के लिए सही उपकरण है। एक साधारण उदाहरण स्क्रिप्ट को अजगर से तुलना करने के लिए एक अच्छा उदाहरण देखें: innolitics.com/articles/programming-languages/… (आपको थोड़ा नीचे स्क्रॉल करने की आवश्यकता है)। मुझे लगता है कि यह तुलना में थोड़ा अधिक परिष्कृत उदाहरण है cat footer
jdg 23

7

इसके अलावा: साइको बनाम सी ++

यह अभी भी एक बुरा तुलना है, क्योंकि दोपहर के बाद नंबर पक्की चीजें बेंचमार्क वैसे भी शुद्ध पायथन में ध्यान केंद्रित करती हैं। एक बेहतर एक यथार्थवादी अनुप्रयोगों या C ++ बनाम NumPy के प्रदर्शन की तुलना करना होगा, ताकि यह अनुमान लगाया जा सके कि क्या आपका कार्यक्रम बिल्कुल धीमा होगा।


2
दूसरे शब्दों में - चूंकि नंबरक्रंची सामान इतना धीमा है कि इसे C ++ में लिखें और इसे Python :-) से कॉल करें
igouy

1
यदि आप इसे तेजी से बनाने के लिए अजगर में एक पुस्तकालय का उपयोग करने जा रहे हैं, तो आप c ++ में नंबर क्रंचिंग लाइब्रेरी का उपयोग कर सकते हैं। इस तरह आप कोड का एक गुच्छा लिखने के लिए बिना c ++ का लचीलापन रखते हैं :)
SuperSim135

यह एक ईश्वर- तीर्थ निरर्थक है। ओपी शाब्दिक रूप से पठनीयता और सुविधा के लिए पायथन को प्राथमिकता देता है, कोई व्यक्ति सीधे अपनी पसंद की भाषा का उपयोग क्यों करेगा, जब पुस्तकालय लेखक होने के बाद भी वे अधिकांश प्रदर्शन लाभ प्राप्त कर सकते हैं? पुस्तकालयों का उपयोग करने की बात यह नहीं है कि वे जिस तरह का काम करते हैं, वे खुद को बेहतर करते हैं, कि एक पुस्तकालय एक मूल बंधन होता है एक अनुकूलन / कार्यान्वयन विस्तार है।
millimoose

6

यहां समस्या यह है कि आपके पास दो अलग-अलग भाषाएं हैं जो दो अलग-अलग समस्याओं को हल करती हैं ... इसकी तरह कोड ++ के साथ C ++ की तुलना करना।

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

C ++ तीव्र अनुप्रयोग विकास के लिए नहीं है और निम्न स्तर की प्रोग्रामिंग के लिए C से गति की विरासत प्राप्त करता है।


3

यह हमेशा की तरह प्रोग्रामिंग भाषा का उपयोग करने में आसान और प्रबंधित करने में एक ही समस्या है - वे धीमे (और कभी-कभी मेमोरी खाने वाले) हैं।

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


वे पुस्तकालय पहले से ही पायथन या सी या जावा के लिए लिखे गए हैं, इसलिए उन्हें एक साथ गोंद करने के लिए एक गतिशील भाषा का उपयोग क्यों नहीं किया जाता है?
aoeu256

2

मुझे लगता है कि उन आंकड़ों से पता चलता है कि पायथन बहुत धीमा है और उन बेंचमार्क के लिए अधिक मेमोरी का उपयोग करता है - क्या आप सुनिश्चित हैं कि आप उन्हें सही तरीके से पढ़ रहे हैं?

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


वास्तव में। जब प्रदर्शन एक मुद्दा है, क्या अजगर पर बाहरी मॉड्यूल एक साथ उच्च प्रदर्शन बाध्यकारी है, या प्रणाली प्रोटोटाइप और उसके बाद की इजाजत दी बाधाओं अच्छा (आमतौर पर एक आंतरिक पाश में गहरी) के रूप में एक सी मॉड्यूल आदि फिर से लिखा जा रहा है
Xan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.