मैंने हमेशा सोचा है कि पायथन के फायदे कोड पठनीयता और विकास की गति हैं, लेकिन समय और स्मृति उपयोग सी ++ के रूप में अच्छे नहीं थे।
इन आँकड़ों ने मुझे बहुत मुश्किल से मारा।
आपका अनुभव आपको पायथन बनाम सी ++ समय और स्मृति उपयोग के बारे में क्या बताता है?
मैंने हमेशा सोचा है कि पायथन के फायदे कोड पठनीयता और विकास की गति हैं, लेकिन समय और स्मृति उपयोग सी ++ के रूप में अच्छे नहीं थे।
इन आँकड़ों ने मुझे बहुत मुश्किल से मारा।
आपका अनुभव आपको पायथन बनाम सी ++ समय और स्मृति उपयोग के बारे में क्या बताता है?
जवाबों:
मुझे लगता है कि आप उन आंकड़ों को गलत तरीके से पढ़ रहे हैं। वे दिखाते हैं कि पायथन C ++ से लगभग 400 गुना धीमा है और एक एकल मामले के अपवाद के साथ, पायथन एक मेमोरी हॉग के अधिक है। जब यह स्रोत आकार की बात आती है, तो पायथन फ्लैट से बाहर जीतता है।
पायथन के साथ मेरे अनुभव एक ही निश्चित प्रवृत्ति दिखाते हैं कि किसी भी गंभीर संख्या में क्रंचिंग करते समय पायथन C ++ की तुलना में 10 से 100 गुना धीमा होता है। इसके कई कारण हैं, जिनमें से प्रमुख हैं: ए) पायथन की व्याख्या की जाती है, जबकि सी ++ संकलित है; बी) पायथन में कोई आदिम नहीं है, बिलियन प्रकार (इंट, फ्लोट, आदि) सहित सभी चीजें ऑब्जेक्ट हैं; ग) एक पायथन सूची विभिन्न प्रकार की वस्तुओं को पकड़ सकती है, इसलिए प्रत्येक प्रविष्टि को अपने प्रकार के बारे में अतिरिक्त डेटा संग्रहीत करना होगा। ये सभी गंभीर रूप से रनटाइम और मेमोरी खपत दोनों में बाधा डालते हैं।
हालांकि यह पायथन की अनदेखी का कोई कारण नहीं है। बहुत सारे सॉफ्टवेयर को 100 समय के धीमापन कारक के साथ भी अधिक समय या मेमोरी की आवश्यकता नहीं होती है। विकास लागत वह है जहां अजगर सरल और संक्षिप्त शैली के साथ जीतता है। विकास लागत पर यह सुधार अक्सर अतिरिक्त सीपीयू और स्मृति संसाधनों की लागत से आगे निकल जाता है। जब यह नहीं होता है, तब C ++ जीतता है।
numpyऔर scipy, एक बड़े pythonकोड बेस में शुद्ध अजगर में बहुत सारे कोड होने की संभावना है, जिससे चीजें धीमी हो जाती हैं C++। एक अजगर स्क्रिप्ट एक स्क्रिप्ट की गति के करीब पहुंचती है C++क्योंकि उसके Cकोड का प्रतिशत जाता है 100, जिस बिंदु पर यह अब अजगर स्क्रिप्ट नहीं है। अजगर दूर ले जा रहा है, निश्चित रूप से, लेकिन इसलिए नहीं कि यह उतना ही तेज़ है C++- क्योंकि इसका उपयोग करना आसान है।
शूटआउट पर पायथन के सभी सबसे धीमे (> 100x) वैज्ञानिक ऑपरेशन हैं जिनमें उच्च GFlop / s गिनती की आवश्यकता होती है। आप वैसे भी उन लोगों के लिए अजगर का उपयोग नहीं करना चाहिए। अजगर का उपयोग करने का सही तरीका एक मॉड्यूल को आयात करना है जो उन गणनाओं को करता है, और फिर अपने परिवार के साथ एक आरामदायक दोपहर है। यह अजगर का तरीका है :)
मेरा अनुभव बेंचमार्क के समान है। पायथन धीमा हो सकता है और अधिक मेमोरी का उपयोग करता है। मैं बहुत लिखता हूं, बहुत कम कोड और यह पहली बार बहुत कम डिबगिंग के साथ काम करता है। चूंकि यह मेरे लिए स्मृति का प्रबंधन करता है, इसलिए मुझे किसी भी स्मृति प्रबंधन को करने की ज़रूरत नहीं है, कोर लीक का पीछा करने के घंटे की बचत।
आपका सवाल क्या हैं?
स्रोत आकार वास्तव में मापने के लिए एक समझदार चीज नहीं है। उदाहरण के लिए, निम्नलिखित शेल स्क्रिप्ट:
cat foobar
अपने पाइथन या C ++ समकक्षों की तुलना में बहुत कम है।
cat footer।
इसके अलावा: साइको बनाम सी ++ ।
यह अभी भी एक बुरा तुलना है, क्योंकि दोपहर के बाद नंबर पक्की चीजें बेंचमार्क वैसे भी शुद्ध पायथन में ध्यान केंद्रित करती हैं। एक बेहतर एक यथार्थवादी अनुप्रयोगों या C ++ बनाम NumPy के प्रदर्शन की तुलना करना होगा, ताकि यह अनुमान लगाया जा सके कि क्या आपका कार्यक्रम बिल्कुल धीमा होगा।
यहां समस्या यह है कि आपके पास दो अलग-अलग भाषाएं हैं जो दो अलग-अलग समस्याओं को हल करती हैं ... इसकी तरह कोड ++ के साथ C ++ की तुलना करना।
पायथन तेजी से अनुप्रयोग विकास के लिए है और जब प्रदर्शन एक न्यूनतम चिंता का विषय है।
C ++ तीव्र अनुप्रयोग विकास के लिए नहीं है और निम्न स्तर की प्रोग्रामिंग के लिए C से गति की विरासत प्राप्त करता है।
यह हमेशा की तरह प्रोग्रामिंग भाषा का उपयोग करने में आसान और प्रबंधित करने में एक ही समस्या है - वे धीमे (और कभी-कभी मेमोरी खाने वाले) हैं।
ये प्रसंस्करण के बजाय नियंत्रण करने वाली भाषाएं हैं। अगर मुझे छवियों को बदलने के लिए आवेदन लिखना होगा और पायथन का उपयोग करना होगा, तो सभी प्रसंस्करण C ++ में लिखे जा सकते हैं और पायथन से जुड़ सकते हैं जबकि इंटरफ़ेस और प्रक्रिया नियंत्रण निश्चित रूप से पायथन होगा।
मुझे लगता है कि उन आंकड़ों से पता चलता है कि पायथन बहुत धीमा है और उन बेंचमार्क के लिए अधिक मेमोरी का उपयोग करता है - क्या आप सुनिश्चित हैं कि आप उन्हें सही तरीके से पढ़ रहे हैं?
मेरे अनुभव में, जो ज्यादातर पाइथन में नेटवर्क- और फाइल-सिस्टम-बाउंड प्रोग्राम लिखने के साथ है, पायथन किसी भी तरह से महत्वपूर्ण नहीं है जो मायने रखता है। उस तरह के काम के लिए, इसका लाभ इसकी लागत को कम करता है।