সেল সিক:
শেলের কর্মক্ষমতা বেঞ্চ চিহ্নিতকরণের একটি দরকারী উপায় হ'ল বার বার খুব ছোট, সাধারণ মূল্যায়ন। এটি গুরুত্বপূর্ণ, আমি মনে করি, কেবল লুপ নয়, তবে ইনপুট থেকে লুপ করতে হবে , কারণ একটি শেল পড়তে হবে <&0
।
আমি ভেবেছিলাম এটি ইতিমধ্যে পোস্ট করা কুইংলম পরীক্ষাগুলির পরিপূরক হবে কারণ এটি একবারে একটি অনুরোধ করা একটি শেল প্রক্রিয়াটির কার্যকারিতা প্রদর্শন করে যা তার শরীরে প্রমাণিত হয় যে শেল প্রক্রিয়াটি যখন চালানো হয় তখন কত দ্রুত লোড হয়। এইভাবে, আমাদের মধ্যে, আমরা মুদ্রার উভয় দিকটি coverেকে রাখি।
ডেমোটি সহজ করার জন্য এখানে একটি ফাংশন রয়েছে:
sh_bench() ( #dont copy+paste comments
o=-c sh=$(command -v "$1") ; shift #get shell $PATH; toss $1
[ -z "${sh##*busybox}" ] && o='ash -c' #cause its weird
set -- "$sh" $o "'$(cat <&3)'" -- "$@" #$@ = invoke $shell
time env - "$sh" $o "while echo; do echo; done|$*" #time (env - sh|sh) AC/DC
) 3<<-\SCRIPT
#Everything from here down is run by the different shells
i="${2:-1}" l="${1:-100}" d="${3:-
}"; set -- "\$((n=\$n\${n:++\$i}))\$d" #prep loop; prep eval
set -- $1$1$1$1$1$1$1$1$1$1 #yup
while read m #iterate on input
do [ $(($i*50+${n:=-$i})) -gt "$(($l-$i))" ] || #eval ok?
eval echo -n \""$1$1$1$1$1"\" #yay!
[ $((n=$i+$n)) -gt "$(($l-$i))" ] && #end game?
echo "$n" && exit #and EXIT
echo -n "$n$d" #damn - maybe next time
done #done
#END
SCRIPT #end heredoc
এটি হয় প্রতিটি নিউলাইন পড়ার জন্য একবার পরিবর্তনশীল বৃদ্ধি করে, অথবা সামান্য-অনুকূলকরণ হিসাবে, যদি এটি করতে পারে তবে এটি নিউলাইন রিডে 50 বার বৃদ্ধি করে। প্রতিবার ভেরিয়েবল বর্ধিত হয় এটিতে মুদ্রিত হয় stdout
। এটি অনেকটা এক ধরণের seq
ক্রসের মতো আচরণ করে nl
।
এটি কেবল এটি কী করে তা খুব স্পষ্ট করতে - উপরের ফাংশনে set -x;
এটির আগে ser োকানোর পরে কিছু ছাঁটাই আউটপুট এখানে রয়েছে time
:
time env - /usr/bin/busybox ash -c '
while echo; do echo; done |
/usr/bin/busybox ash -c '"'$(
cat <&3
)'"' -- 20 5 busybox'
সুতরাং প্রতিটি শেলকে প্রথমে এর মতো বলা হয়:
env - $shell -c "while echo; do echo; done |..."
... ইনপুট জেনার জন্য এটি পড়তে পড়তে 3<<\SCRIPT
- বা cat
যেভাবে হয়, কখন লুপ করতে হবে । এবং এর অন্যদিকে |pipe
এটি আবার নিজেকে ডাকে:
"...| $shell -c '$(cat <<\SCRIPT)' -- $args"
তাই প্রাথমিক কলটি বাদ দিয়ে env
(কারণ cat
আসলে আগের লাইনে ডাকা হয়) ; এটি প্রস্থান না হওয়া অবধি কল করার সময় থেকে অন্য কোনও প্রক্রিয়া শুরু করা হয় না। কমপক্ষে, আমি আশা করি এটি সত্য।
সংখ্যার আগে ...
বহনযোগ্যতার বিষয়ে আমার কিছু নোট করা উচিত।
posh
পছন্দ করে না $((n=n+1))
এবং জেদ করে না$((n=$n+1))
mksh
printf
বেশিরভাগ ক্ষেত্রে একটি বিল্টিন নেই । আগের পরীক্ষাগুলিতে এটি একটি দুর্দান্ত চুক্তিতে পিছিয়ে ছিল - এটি /usr/bin/printf
প্রতিটি রানের জন্য প্রার্থনা করেছিল । সুতরাং echo -n
উপরের।
আমার মনে আছে আরও কিছু ...
যাইহোক, সংখ্যায়:
for sh in dash busybox posh ksh mksh zsh bash
do sh_bench $sh 20 5 $sh 2>/dev/null
sh_bench $sh 500000 | wc -l
echo ; done
এটি সব একসাথে পেয়ে যাবেন ...
0dash5dash10dash15dash20
real 0m0.909s
user 0m0.897s
sys 0m0.070s
500001
0busybox5busybox10busybox15busybox20
real 0m1.809s
user 0m1.787s
sys 0m0.107s
500001
0posh5posh10posh15posh20
real 0m2.010s
user 0m2.060s
sys 0m0.067s
500001
0ksh5ksh10ksh15ksh20
real 0m2.019s
user 0m1.970s
sys 0m0.047s
500001
0mksh5mksh10mksh15mksh20
real 0m2.287s
user 0m2.340s
sys 0m0.073s
500001
0zsh5zsh10zsh15zsh20
real 0m2.648s
user 0m2.223s
sys 0m0.423s
500001
0bash5bash10bash15bash20
real 0m3.966s
user 0m3.907s
sys 0m0.213s
500001
আরবিট্রারি = ঠিক আছে?
তবুও, এটি একটি বরং স্বেচ্ছাসেবী পরীক্ষা, তবে এটি পরীক্ষার পাঠ্য ইনপুট, গণিত মূল্যায়ন এবং পরিবর্তনশীল সম্প্রসারণ করে। সম্ভবত ব্যাপক নয়, তবে সম্ভবত এটির কাছাকাছি।
টেরেসা ই জুনিয়রের সম্পাদনা : @ মেকসিভার এবং আমি আরও অনেক পরীক্ষা করেছি ( বিশদগুলির জন্য আমাদের চ্যাট দেখুন), এবং আমরা দেখতে পেলাম যে ফলাফলগুলি সংক্ষেপে এইভাবে সংক্ষেপিত হতে পারে:
- আপনি গতি প্রয়োজন হয়, তাহলে সঙ্গে হ 'ল যেতে ড্যাশ , এটা অন্য কোন শেল তুলনায় অনেক দ্রুত এবং তুলনায় দ্রুততর 4x সম্পর্কে ব্যাশ ।
- যদিও , busybox এর শেল তুলনায় অনেক ধীর হতে পারে ড্যাশ , কিছু পরীক্ষার এটা, দ্রুত হতে পারে এটা তার নিজস্ব userland ইউটিলিটি অনেক আছে, কারণ, মত
grep
, sed
, sort
, ইত্যাদি, যা সাধারণভাবে ব্যবহৃত গনুহ হিসাবে অনেক বৈশিষ্ট্য নেই ইউটিলিটিগুলি, তবে কাজটি যতটা সম্ভব করতে পারে।
- গতি যদি আপনার যত্ন নেয় এমন সমস্ত কিছু না হয় তবে ksh (বা ksh93 ) গতি এবং বৈশিষ্ট্যগুলির মধ্যে সেরা আপস হিসাবে বিবেচিত হতে পারে। এটা তোলে গতি ছোট তুলনা নেই mksh , কোন দিকে চেয়ে দ্রুত ব্যাশ , এবং এটি, এছাড়াও কিছু অনন্য বৈশিষ্ট্য আছে মত ফ্লোটিং পয়েন্ট গাণিতিক ।
- যদিও বাশ তার সরলতা, স্থায়িত্ব এবং কার্যকারিতার জন্য বিখ্যাত, এটি আমাদের পরীক্ষার বেশিরভাগ শেলগুলির মধ্যে সবচেয়ে ধীর এবং বড় ব্যবধানে ছিল was