2010-12-15 16 views
7

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

तो, मैंने प्रत्येक प्रदर्शन में अपने प्रदर्शन का परीक्षण करने के लिए एक डेमो प्रोग्राम लिखा था।

पर्ल

#!/usr/bin/perl 

exit(1) if $ARGV[-1] ne 'test'; 
print "Testing...\n"; 

my $a = 1.0; 
my $i; 

for (0 .. 500) { $a+=$a/100; } 

printf "Result: %.5f\n", $a; 

अजगर

#!/usr/bin/python 

from sys import argv 

if argv[-1] != 'test': 
    exit(1) 

print 'Testing...' 

a = 1.0 
for i in range(0, 501): 
    a+=a/100 

print 'Result: %.5f' %a 

रूबी

#!/usr/bin/ruby 

if ARGV[0] != "test" 
exit(1) 
end 

print "Testing...\n" 
a = 1.0 

(0..500).each do a+=a/100 end 

printf "Result: %.5f", a 

सी

#include <stdio.h> 
#include <string.h> 

int main (int argc, char *argv[]) { 

if (strcmp(argv[1], "test") != 0) return(1); 

printf("Testing...\n"); 

double a = 1.0; 
int i; 

for (i=0; i <= 500; i++) 
    a+=a/100; 

printf("Result: %.5f\n",a); 
return 0; 
} 

परिणाम हैं:

पर्ल

असली 0m0.006s
उपयोगकर्ता 0m0.002s
sys 0m0.004s

Py Thon

असली 0m0.075s
उपयोगकर्ता 0m0.061s
sys 0m0.013s

रूबी

असली 0m0.017s
उपयोगकर्ता 0m0.008s
sys 0m0.008s

सी

असली 0m0.003s
उपयोगकर्ता 0m0.001s
sys 0m0.002s

अपने परीक्षण किसी तरह से त्रुटिपूर्ण है?

मैंने पढ़ा है कि पाइथन बड़े कार्यक्रमों (See here) के लिए बेहतर है। क्या यह फिर perlformed होगा? उनके स्मृति उपयोग के बारे में क्या?

मैं अपने वीपीएस पर डेमन्स के रूप में चलाने के लिए कुछ बड़े अनुप्रयोग लिख रहा हूं जिसमें सीमित मात्रा में रैम है इसलिए मेरा वास्तविक लक्ष्य स्मृति उपयोग को कम करना है।

+9

500 पूर्णांक शायद ही बेंचमार्किंग और तुम सिर्फ इस एक बार चलाने के लिए पर्याप्त है। और किसी भी तरीके से, क्या यह वास्तव में आपके लिए महत्वपूर्ण है *? – user225312

+0

डाउनवॉट्स क्यों? – zoul

+0

क्योंकि आप गलत सवाल पूछ रहे हैं। –

उत्तर

0

नहीं, यह है कि मैं संबंधित भाषाओं के संदर्भ में उन भाषाओं को देखने की अपेक्षा करता हूं।

पायथन और रूबी जैसी अधिक अच्छी तरह से ओओ भाषाएं स्वाभाविक रूप से धीमी हैं, इन दोनों विशेष रूप से इसलिए हैं क्योंकि उनका अर्थ है। (ठीक है पाइथन संकलित किया जा सकता है, लेकिन यह अभी भी धीमा है)

बड़े कार्यक्रमों के लिए पाइथन बेहतर माना जाएगा क्योंकि जटिलता के पैमाने के रूप में व्यवस्थित करना आसान है। बड़ी संख्या में पारस्परिक प्रतिलिपि स्क्रिप्ट प्रबंधित करने में बहुत कठोरता होती है। विशेष रूप से जब आप उन्हें दो सप्ताह बाद नहीं पढ़ सकते हैं। = ओ)

प्रोग्रामर समय ज्यादातर मामलों में सीपीयू समय के रूप में महत्वपूर्ण है।

+0

मेरा वर्तमान एप्लिकेशन perl में लिखा गया है जो लगभग 100 एमबी रैम का उपयोग कर रहा है। मुझे लगा कि अगर मैं इसे एक अलग भाषा में कम से कम 30 एमबी तक कम कर सकता हूं तो यह उस समय के लायक है जब मैं इसे लिखने में व्यतीत करूंगा क्योंकि अन्यथा मैं एक उच्च योजना पर स्विच करना समाप्त कर दूंगा। – perlit

+4

@perlit: naively लिखित perl एक लक्ष्य के रूप में कम स्मृति उपयोग के साथ लिखित पर्ल की तुलना में बहुत अधिक स्मृति ले सकता है। उस ने कहा, 100 एमबी वर्चुअल मेमोरी का मतलब 100 एमबी रैम नहीं है ... – ysth

+0

perlit: अक्सर, पर्ल अन्य गतिशील भाषाओं की तुलना में कम स्मृति का उपयोग करता है। अपने कोड की समीक्षा करें, आपको कुछ मेमोरी बचत मिल सकती है। –

6

आप शायद ज्यादातर दुभाषिये की स्टार्टअप भूमि के ऊपर का परीक्षण कर रहे हैं और यहां तक ​​कि बहुत सही ढंग से मापने नहीं कुछ मुद्दों कर रहे हैं ...

  1. आपका परीक्षण पर्याप्त क्रम जमा नहीं करता है।

  2. मुझे परवाह नहीं है कि रूल या पायथन रूबी की तुलना में 10x तेज हैं, मैं उस चीज़ का उपयोग करना चाहता हूं जो मैं सबसे अच्छी भाषा मानता हूं ... जिसकी मुझे लिखने की सबसे प्रेरणा है ... एक लगता है कि

  3. एएसआर लेख काफी पुराना है और निश्चित रूप से रुबी शामिल नहीं है।

+5

बेशक, यह पाइथन और यहां तक ​​कि पर्ल में कोड "सुंदर" लिखने के बावजूद (और आसान) है (कोड कितना अर्थहीन है)। एक अच्छा प्रोग्रामर हमेशा एक रास्ता पाता है। –

+0

1. आह, तो अगर मैं कुछ सेकंड के लिए सोता हूं(), तो क्या यह अधिक सटीक होगा? 2. यह गति नहीं है कि मैं वास्तव में * चिंतित हूं, यह स्मृति उपयोग है। व्यक्तिगत रूप से, मुझे पर्ल पसंद है लेकिन यह सोच रहा था कि पाइथन में मेरे आवेदन को फिर से लिखने से मेरी मेमोरी उपयोग कम हो जाएगी। – perlit

+0

राफ, निश्चित रूप से, मुझे शायद "मेरी पसंदीदा भाषा" कहा जाना चाहिए था और उसे छोड़ दिया था। :-) – DigitalRoss

3

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

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

और टिप्पणियां पढ़ने के बाद: को फिर से लिखने के बाद स्मृति उपयोग पर कटौती करने का प्रयास करें प्रोफाइलिंग के बिना पागल है।

0

कुछ मुद्दा मैं के बारे में सोच सकते हैं:

  • आप अस्थायी नंबर पर कार्य करते हैं। आप नहीं जानते कि यह प्रत्येक भाषा पर कैसे कार्यान्वित किया जाता है (जो परिशुद्धता? फ्लोट? डबल?) इसके परिणामस्वरूप गति/परिणाम अंतर हो सकता है।

  • गिनती की संख्या बहुत छोटी है, आपको प्रोग्राम को 10 सेकंड से अधिक चलाने के लिए नेस्टेड लूप करना चाहिए।

उदाहरण के लिए:

for(0:10000) // change variable depending on what your machine 
    for(0:10000) 
    // your operation here 
संबंधित मुद्दे