শেল লুপগুলি ধীর এবং বাশ হ'ল ধীর। শাঁসগুলি লুপগুলিতে ভারী কাজ করার উদ্দেশ্যে নয়। শেলগুলি বোঝানো হয় ডেটাগুলির ব্যাচে কয়েকটি বাহ্যিক, অনুকূলিত প্রক্রিয়াগুলি প্রবর্তন করতে।
যাইহোক, আমি কৌতূহল ছিল কিভাবে শেল লুপগুলি তুলনা করে তাই আমি একটি সামান্য বেঞ্চমার্ক তৈরি করেছি:
#!/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
(
বিশদ:
- সিপিইউ: ইনটেল (আর) কোর (টিএম) আই 5 সিপিইউ এম 430 @ 2.27GHz
- ksh: সংস্করণ sh (এটিএন্ডটি গবেষণা) 93u + 2012-08-01
- ব্যাশ: জিএনইউ ব্যাশ, সংস্করণ 4.3.11 (1) -রেলিজ (x86_64-pc-linux-gnu)
- zsh: zsh 5.2 (x86_64- অজানা-লিনাক্স-গনু)
- ড্যাশ: 0.5.7-4buntu1
)
(সংক্ষেপিত) ফলাফল (প্রতি পুনরাবৃত্তির সময়) হ'ল:
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.7µ দ্রুততম লুপ রয়েছে
- ড্যাশ দ্রুততম হয়েছে
while [
সম্পর্কে এ লুপ 5.8μs পুনরাবৃত্তির প্রতি
লুপগুলির জন্য সি দ্রুতগতির 3-4 দশমিক অর্ডার হতে পারে। (শুনেছি টরভাল্ডস সি ভালবাসে)।
লুপের জন্য অনুকূলিত সি বাশের while [
লুপের (ধীরতম শেল লুপ) চেয়ে 56500 গুণ বেশি এবং কেএসএসের for (
লুপের (দ্রুততম শেল লুপ) এর চেয়ে 6750 গুণ বেশি দ্রুত ।
আবার শাঁসের স্বচ্ছলতা যদিও ততটা গুরুত্ব পাবে না, কারণ শাঁসগুলির সাথে আদর্শ প্যাটার্নটি হ'ল বাহ্যিক, অনুকূলিত প্রোগ্রামগুলির কয়েকটি প্রক্রিয়াতে অফলোড।
এই নিদর্শন দিয়ে, শেলগুলি প্রায়শই পাইথন স্ক্রিপ্টগুলির চেয়ে বেশি পারফরম্যান্স সহ স্ক্রিপ্টগুলি লেখার পক্ষে সহজ করে তোলে (গতবার আমি পরীক্ষা করে দেখলাম, পাইথনগুলিতে প্রক্রিয়া পাইপলাইন তৈরি করা বরং আনাড়ি ছিল))
আর একটি বিষয় বিবেচনার জন্য হ'ল শুরুর সময়।
time python3 -c ' '
আমার পিসিতে 30 থেকে 40 এমএস লাগে যদিও শেলগুলি প্রায় 3 এমএস লাগে। আপনি যদি প্রচুর স্ক্রিপ্ট চালু করেন তবে এটি দ্রুত যুক্ত হয়ে যায় এবং অজগরটি শুরু করতে যে অতিরিক্ত 27-37 এমএস লাগে তার মধ্যে আপনি খুব বেশি কিছু করতে পারেন। ছোট স্ক্রিপ্টগুলি সেই সময়ের ফ্রেমে বেশ কয়েকবার সমাপ্ত হতে পারে।
(নোডজেস সম্ভবত এই বিভাগের সবচেয়ে খারাপ স্ক্রিপ্টিং রানটাইম হিসাবে শুরু হতে প্রায় 100 মিমি সময় নেয় (যদিও এটি একবার শুরু হয়ে গেলেও, আপনাকে স্ক্রিপ্টিং ভাষার মধ্যে আরও ভাল পারফর্মার খুঁজে পেতে খুব চাপ দেওয়া হবে))।