मुझे अन्य उत्तरों को पढ़ने का लाभ मिला है। के लिए मेरे जैसे शुरुआत के लोगों कारण पता होना चाहिए कि हम क्यों इतनी बड़ी पूर्णांक यहाँ के साथ हैं निपटने है कि दोनों है Python
और bc
कर सही-साहचर्य , घातांक विस्तार जिसका अर्थ है कि यह नहीं है 6^36
कि हम मूल्यांकन कर रहे हैं बल्कि 6^46656
जो काफी बड़ा है। 1
निम्न आदेशों पर विविधताओं का उपयोग करते हुए, हम time
आरक्षित शब्द और कमांड दोनों के आउटपुट के एक विशिष्ट तत्व के लिए औसत निकाल सकते हैं :
for i in {1..1000}; do (time echo 6^6^6 | bc > /dev/null) 2>&1; done | grep 'rea' | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'
for i in {1..1000}; do (/usr/bin/time -v sh -c 'echo 6^6^6 | bc > /dev/null') 2>&1; done | grep 'Use' | sed -e s/.*:// | awk '{sum += $1} END {print sum / NR}'
किसी अन्य मार्ग पर जाना और फ़ाइल को पूरी तरह से तुलना से निकालना संभव है। इसके अलावा, हम dc
कमांड जैसे कुछ के साथ bc की टाइमिंग की तुलना कर सकते हैं , क्योंकि ऐतिहासिक रूप से पूर्व बाद में "फ्रंट एंड प्रोसेसर" है। निम्नलिखित आदेश समयबद्ध थे:
echo 6^6^6 | bc
echo 6 6 6 ^ ^ p | dc
echo print 6**6**6 | python2.7
नोट dc
कमांड, घातांक के लिए बाएं-सहयोगी है। 2
time
1000 पुनरावृत्तियों (सेकंड में) के साथ हमारे कुछ परिणाम हैं :
0.229678 real bc
0.228348 user bc
0.000569 sys bc
0.23306 real dc
0.231786 user dc
0.000395 sys dc
0.07 real python
0.065907 user python
0.003141 sys python
bc
और dc
इस संदर्भ में तुलनीय प्रदर्शन की पेशकश करते हैं।
GNU कमांड से कम सटीक 3 परिणाम (पैमाने सटीक यहाँ मान्य नहीं है लेकिन परिणाम समान हैं):/usr/bin/time
time
0.2224 user bc
0 sys bc
0.23 Elapsed bc
0.22998 user dc
0 sys dc
0.23 Elapsed dc
0.06008 user python
0 sys python
0.07 Elapsed python
इसका एक फायदा /usr/bin/time
यह है कि यह -v
विकल्प प्रदान करता है जो अधिक जानकारी देता है जो अंततः उपयोगी हो सकता है।
पायथन मॉड्यूल के साथ बात करने के लिए आंतरिक रूप से इसका मूल्यांकन करना भी संभव है timeit
:
python2.7 -m timeit -n 1000 -r 1 'print 6**6**6' | grep 'loops'
1000 loops, best of 1: 55.4 msec per loop
जो हमने पहले देखा था, उससे थोड़ा तेज है। चलिए दुभाषिए की ही कोशिश करते हैं:
>>> import timeit
>>> import sys
>>> import os
>>> T = timeit.Timer("print 6**6**6")
>>> n = int(1000)
>>> f = open(os.devnull, 'w')
>>> sys.stdout = f
>>> t = t.timeit(n)
>>> sys.stdout = sys.__stdout__
>>> print t/n
0.0553743481636
मैंने देखा है यह सबसे तेज है।
यदि हम एक कम घातांक का मूल्यांकन करते हैं 6^6
, तो समय कमांड आश्चर्यजनक परिणाम देता है - उसी for
लूप कमांड का उपयोग करके जिसका उपयोग हमने अभी किया है:
0.001001 bc real
0.000304 user
0.000554 sys
0.014 python real i.e. 10x more than bc??
0.010432 user
0.002606 sys
तो एक छोटे पूर्णांक के साथ bc
अचानक बहुत तेज है ?? सिस्टम रिबूट से दूसरे रन तक कोई फर्क नहीं पड़ता। एक ही समय में, अगर हम timeit
अजगर के लिए उपयोग करते हैं, तो हमें मिलता है:
python2.7 -m timeit -n 100000 -r 1 'print 6**6' | grep loops
100000 loops, best of 1: 0.468 usec per loop
यह माइक्रोसेकंड है , मिलीसेकंड नहीं, इसलिए यह for
लूप का उपयोग करते हुए बहुत धीमे परिणामों के साथ मेल नहीं खाता है । हो सकता है कि अन्य उपकरणों को इसके आगे परीक्षण करने की आवश्यकता हो और जैसा कि अन्य लोगों ने समझाया है कि यहां आंख से मिलने से अधिक है। ऐसा लगता है कि पायथन सवाल के परिदृश्य में तेज था, लेकिन यह स्पष्ट नहीं है कि क्या निष्कर्ष उससे परे खींचा जा सकता है ...
1. यह कहने की आवश्यकता नहीं है कि यह किसी चीज के दायरे से परे है जैसे कि गूंज का अंकगणितीय विस्तार echo $((6**6**6))
- यानी इसके साथ bash
ही सही-सही संबंध भी होता है 6^6^6 = 6^(6^6)
।
2. इसके साथ तुलना करें 6 6 ^ 6 ^ p
:।
3. यह संभव है कि GNU टाइम कमांड BSD UNIX (GNU टाइम इंफो डॉक्यूमेंट) पर चलने पर अधिक जानकारी प्रदान करता है: 'टाइम' द्वारा दर्शाई गई अधिकांश जानकारी 'प्रतीक्षा 3' सिस्टम कॉल से ली गई है। संख्याएँ केवल उतनी ही अच्छी हैं जितनी 'प्रतीक्षा 3' द्वारा लौटी हैं। कई सिस्टम उन सभी संसाधनों को नहीं मापते हैं जिन पर 'समय' रिपोर्ट कर सकता है; उन संसाधनों को शून्य के रूप में सूचित किया जाता है। जो सिस्टम सबसे अधिक या सभी संसाधनों को मापते हैं, वे 4.2 या 4.3BSD पर आधारित होते हैं। बाद में बीएसडी रिलीज़ विभिन्न मेमोरी मैनेजमेंट कोड का उपयोग करता है जो कम संसाधनों को मापता है। - उन सिस्टमों पर जिनके पास 'प्रतीक्षा 3' कॉल नहीं है, जो स्थिति की जानकारी देता है, इसके बजाय 'बार' सिस्टम कॉल का उपयोग किया जाता है। यह 'प्रतीक्षा 3' की तुलना में बहुत कम जानकारी प्रदान करता है, इसलिए उन प्रणालियों के समय में अधिकांश संसाधनों को शून्य के रूप में रिपोर्ट करता है।