शेल लूप्स धीमे हैं और बैश सबसे धीमे हैं। गोले लूप में भारी काम करने के लिए नहीं हैं। गोले डेटा के बैचों पर कुछ बाहरी, अनुकूलित प्रक्रियाओं को लॉन्च करने के लिए हैं।
वैसे भी, मैं उत्सुक था कि शेल छोरों की तुलना कैसे होती है इसलिए मैंने थोड़ा बेंचमार्क बनाया:
#!/bin/bash
export IT=$((10**6))
echo POSIX:
for sh in dash bash ksh zsh; do
TIMEFORMAT="%RR %UU %SS $sh"
time $sh -c 'i=0; while [ "$IT" -gt "$i" ]; do i=$((i+1)); done'
done
echo C-LIKE:
for sh in bash ksh zsh; do
TIMEFORMAT="%RR %UU %SS $sh"
time $sh -c 'for ((i=0;i<IT;i++)); do :; done'
done
G=$((10**9))
TIMEFORMAT="%RR %UU %SS 1000*C"
echo 'int main(){ int i,sum; for(i=0;i<IT;i++) sum+=i; printf("%d\n", sum); return 0; }' |
gcc -include stdio.h -O3 -x c -DIT=$G -
time ./a.out
(
विवरण:
- CPU: Intel (R) Core (TM) i5 CPU M 430 @ 2.27GHz
- ksh: संस्करण श (एटी एंड टी रिसर्च) 93u + 2012-08-01
- bash: GNU bash, संस्करण 4.3.11 (1) -release (x86_64-pc-linux-gnu)
- zsh: zsh 5.2 (x86_64-अज्ञात-Linux-gnu)
- पानी का छींटा: 0.5.7-4ubuntu1
)
(संक्षिप्त) परिणाम (समय प्रति पुनरावृत्ति) हैं:
POSIX:
5.8 µs dash
8.5 µs ksh
14.6 µs zsh
22.6 µs bash
C-LIKE:
2.7 µs ksh
5.8 µs zsh
11.7 µs bash
C:
0.4 ns C
परिणामों से:
यदि आप थोड़ा तेज़ शेल लूप चाहते हैं, तो यदि आपके पास [[
सिंटैक्स है और आप एक तेज़ शेल लूप चाहते हैं, तो आप एक उन्नत शेल में हैं और आपके पास लूप के लिए सी-लाइक भी है। लूप के लिए सी का उपयोग करें, फिर। वे while [
एक ही शेल में लगभग 2 गुना तेज -लूप हो सकते हैं ।
- ksh के पास
for (
लगभग 2.7shs प्रति पुनरावृत्ति पर सबसे तेज़ लूप है
- पानी का छींटा सबसे तेज़
while [
लगभग 5.8µs प्रति यात्रा है
लूप्स के लिए C तीव्रता के 3-4 दशमलव क्रम हो सकते हैं। (मैंने टॉर्वाल्ड्स लव सी को सुना)।
लूप के लिए अनुकूलित C, बैश के while [
लूप (सबसे धीमी शेल लूप) की तुलना में 56500 गुना तेज है और ksh के for (
लूप (सबसे तेज शेल लूप) की तुलना में 6750 गुना तेज है ।
फिर से, गोले की सुस्ती हालांकि बहुत मायने नहीं रखती है, क्योंकि गोले के साथ विशिष्ट पैटर्न बाहरी, अनुकूलित कार्यक्रमों की कुछ प्रक्रियाओं को लोड करना है।
इस पैटर्न के साथ, शेल अक्सर पायथन स्क्रिप्ट से बेहतर प्रदर्शन के साथ स्क्रिप्ट लिखना बहुत आसान बनाते हैं (पिछली बार जब मैंने जाँच की थी, तो अजगर में प्रक्रिया पाइपलाइन बनाने के बजाय भद्दा था)।
एक और बात पर विचार करने के लिए स्टार्टअप समय है।
time python3 -c ' '
मेरे पीसी पर 30 से 40 एमएस लगते हैं जबकि गोले 3ms के आसपास लगते हैं। यदि आप बहुत सारी स्क्रिप्ट लॉन्च करते हैं, तो यह जल्दी से जुड़ जाता है और आप अतिरिक्त 27-37 एमएस में बहुत कुछ कर सकते हैं जो कि अजगर सिर्फ शुरू करने के लिए लेता है। छोटी स्क्रिप्ट को उस समय सीमा में कई बार खत्म किया जा सकता है।
(NodeJs शायद इस विभाग में सबसे खराब स्क्रिप्टिंग रनटाइम है क्योंकि इसे शुरू करने के लिए लगभग 100ms लगते हैं (भले ही एक बार यह शुरू हो गया हो, आपको स्क्रिप्टिंग भाषाओं में बेहतर प्रदर्शन करने के लिए कड़ी मेहनत करनी होगी)।