ড্যাশ বা অন্য কোনও শেল কি বাশের চেয়ে "দ্রুত"?


57

আমি সর্বদা ভেবেছিলাম যে ব্যাশের পরিবর্তে ড্যাশ ব্যবহারের একমাত্র সুবিধা হ'ল ড্যাশটি আরও ছোট ছিল, এবং ড্যাশগুলির অনেকগুলি উদাহরণ বুট করার সময় দ্রুত শুরু হবে।

তবে আমি কিছু গবেষণা করেছি এবং কিছু লোক তাদের দ্রুত স্ক্রিপ্টগুলি দ্রুত চালানোর আশায় ড্যাশ-এ স্থানান্তরিত করতে দেখেছি এবং উবুন্টু উইকির ড্যাশএএসবিংশ নিবন্ধে এটিও পেয়েছি :

ডিফল্ট শেলটি স্যুইচ করার প্রধান কারণ ছিল দক্ষতা । বাশ ইন্টারেক্টিভ ব্যবহারের জন্য উপযুক্ত একটি দুর্দান্ত পূর্ণ বৈশিষ্ট্যযুক্ত শেল; আসলে এটি এখনও ডিফল্ট লগইন শেল। তবে ড্যাশের সাথে তুলনা করে শুরু করা এবং পরিচালনা করা এটি বরং বড় এবং ধীর

আজকাল আমি আমার সিস্টেমে অনেক কিছুর জন্য প্রচুর ব্যাশ স্ক্রিপ্ট ব্যবহার করছি এবং আমার সমস্যা হ'ল আমার একটি নির্দিষ্ট স্ক্রিপ্ট রয়েছে যা আমি ধারাবাহিকভাবে 24/7 চালিয়ে যাচ্ছি, এটি প্রায় 200 বাচ্চা ছড়িয়ে দেয়, যা একসাথে আমার কম্পিউটারকে 10 heat গরম করে heat সাধারণ ব্যবহারের চেয়ে সি।

এটি প্রচুর পরিমাণে বাশিজম সহ একটি বৃহত স্ক্রিপ্ট, সুতরাং সেগুলি পসিক্স বা অন্য কোনও শেলের সাথে পোর্ট করা খুব সময়সাপেক্ষ হবে (এবং পসিক্স ব্যক্তিগত ব্যবহারের জন্য সত্যই গুরুত্ব দেয় না), তবে আমি যদি এর কিছু হ্রাস করতে পারি তবে তা মূল্যবান হবে CPU 'র ব্যবহার. আমি জানি অন্যান্য বিষয়গুলিও বিবেচনা করা উচিত, যেমন sedএকটি সহজ বাশিজমের মতো ${foo/bar}বা grepতার পরিবর্তে বাইরের বাইনারি পছন্দ করা =~

টিএল; ডিআর ড্যাশের সাথে তুলনা করে শুরু করতে এবং পরিচালনা করতে সত্যই বাশ ধীর হয় ? অন্যান্য ইউনিক্স শেলগুলি কি বাশের চেয়ে কার্যকর ?


12
আপনি যদি পারফরম্যান্সের জন্য এটি বন্দর করতে চলেছেন, তবে আপনি কি মনে করেন যে এটি অন্য কোনও ভাষায় (পারল, পাইথন, রুবি) পুরোপুরি ভালভাবে করা সম্ভব হবে? তারা সাধারণত অনেক বেশি দক্ষ, আমি মনে করি, যদিও এটি কার্যের সঠিক প্রকৃতির উপর নির্ভর করবে।
স্বর্ণলোকস

গৌণ পয়েন্ট: [এছাড়াও একটি অন্তর্নির্মিত হওয়া উচিত।
মাইকেল

2
মনে রাখবেন যে আপনি মেমরির ব্যবহার সম্পর্কে উদ্বিগ্ন নয় তার মধ্যে পার্থক্যটি বেশিরভাগই প্রদর্শিত হয় যদি আপনি বাহ্যিক প্রোগ্রামের চেয়ে শেলটিতে গণনা করছেন (যেমন, আপনি শেলটি ভুল উপায়ে ব্যবহার করছেন!); উদাহরণস্বরূপ, আমার কম্পিউটারে দশ মিলিয়ন (অন্য কিছু না করে) গণনা করতে কিছুক্ষণের লুপ ব্যবহার করে একটি স্ক্রিপ্ট এমএক্সএইচ / জেডএসে 2x ডলার দ্রুত এবং> 2x ড্যাশ দ্রুত, তবে একটি সত্য স্ক্রিপ্টে আমি যতটা সম্ভব অন্য লোকে লোড করতাম প্রোগ্রাম।
loreb

3
bashখুব ধীর হতে ব্যবহৃত। এটি সম্প্রতি প্রচুর অগ্রগতি করেছে, তবে বেশিরভাগ ক্ষেত্রে এটি অন্যান্য শাঁসের তুলনায় এখনও ধীর।
স্টাফেন চেজেলাস

1
সরল বাশিজম ব্যবহার করবেন না[ "$foo" != "${foo#*bar}" ]আপনার গ্রেপ জিনিস পরিচালনা করে আর sedজিনিস: while [ "$foo" != "${foo#*bar}" ]; do s=$s${foo%%bar*} foo=${foo#*bar} ; done ; foo=$s$foo। আপনি কোনও ফাংশনে কোনও জিনিস রাখতে পারেন।
মাইকসার্ভ

উত্তর:


39

সেল সিক:

শেলের কর্মক্ষমতা বেঞ্চ চিহ্নিতকরণের একটি দরকারী উপায় হ'ল বার বার খুব ছোট, সাধারণ মূল্যায়ন। এটি গুরুত্বপূর্ণ, আমি মনে করি, কেবল লুপ নয়, তবে ইনপুট থেকে লুপ করতে হবে , কারণ একটি শেল পড়তে হবে <&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))

  • mkshprintfবেশিরভাগ ক্ষেত্রে একটি বিল্টিন নেই । আগের পরীক্ষাগুলিতে এটি একটি দুর্দান্ত চুক্তিতে পিছিয়ে ছিল - এটি /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

আমি এই কোডটি ব্যাশ (এবং ksh এবং zsh) তেও কাজ করতে পারি না, কেবলমাত্র ড্যাশ, ম্যাক্স এবং পিডিএক্সে। বাশ আমি দেবিয়ান 4.2.37(1)-releaseএবং 4.2.45(2)-releaseএকটি পোর্টিয়াস লাইভসিডি (স্ল্যাকওয়্যার) থেকে চেষ্টা করেছি । ছাড়া null=, পরিবর্তে সংখ্যার outputting এর, এটা যেন আমি চাপা কাজ করে রিটার্ন একটানা, তারপর আমি ব্যাশ বধ আছে SIGKILL
তেরেসা ই জুনিয়র

এবং আমি চেষ্টাও করেছি bash --posix, কোনও লাভ হয়নি।
তেরেসা ই জুনিয়র

@ টেরেজে জুনিয়র - এটি সম্ভবত সম্ভব - যদিও আমি বিশ্বাস করি না এটি কাজ করবে zshzshহাইজ্যাক করবে ttyএবং ভাল, এটি একটি ইন্টারেক্টিভ শেল চালু করবে। আমি আশা করি এটিও bashকরবে - এজন্য আমি কেবলমাত্র এর --posixলিঙ্কটি কল করতে সতর্কতা অবলম্বন করছি । আপনি এটির বেশিরভাগের জন্য যেমনটি প্রত্যাশা করেন তেমনভাবেই আমি এটি করতে পারি তবে এটি তার কাজের চেয়ে বেশি কাজ হতে পারে। আপনি কল করছেন bashবা ফোন করছেন sh?
মাইকজার্ভ

@ তেরেসি জুনিয়র আপনি কি এখানে এসে আউটপুট পোস্ট করতে পারবেন? আমি ঠিক কী ঘটছে তার একটি ভাল ধারণা পেতে চাই।
মাইকজার্ভ

আমার উত্তরটির পাঠ্যটি কী আপনার নিজের নীচে যুক্ত করা উচিত নয়, এটি পরিপূরক করা, এবং তারপরে আমার মুছতে?
তেরেসা ই জুনিয়র

20

একটি মানদণ্ড করা যাক।

সাথে bash:

$ strace -cf bash -c 'for i in $(seq 1 1000); do bash -c ":"; done'

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 99.12    0.376044         188      2004      1002 wait4
  0.74    0.002805           3      1002           clone
  0.03    0.000130           0      4037           read
  0.03    0.000119           0     15026           rt_sigprocmask
  0.03    0.000096           0     15040      6017 stat
  0.01    0.000055           0      8011           open
  0.01    0.000024           0      5013           getegid
  0.01    0.000021           0     16027           rt_sigaction
  0.00    0.000017           0      9020      5008 access
  0.00    0.000014           0      1001      1001 getpeername
  0.00    0.000013           0      1001           getpgrp
  0.00    0.000012           0      5013           geteuid
  0.00    0.000011           0     15025           mmap
  0.00    0.000011           0      1002           rt_sigreturn
  0.00    0.000000           0         1           write
  0.00    0.000000           0      8017           close
  0.00    0.000000           0      7011           fstat
  0.00    0.000000           0      8012           mprotect
  0.00    0.000000           0      2004           munmap
  0.00    0.000000           0     18049           brk
  0.00    0.000000           0         1           pipe
  0.00    0.000000           0         1           dup2
  0.00    0.000000           0      1001           getpid
  0.00    0.000000           0      1002           execve
  0.00    0.000000           0      1001           uname
  0.00    0.000000           0      1001           getrlimit
  0.00    0.000000           0      5013           getuid
  0.00    0.000000           0      5013           getgid
  0.00    0.000000           0      1001           getppid
  0.00    0.000000           0      1002           arch_prctl
  0.00    0.000000           0      1001           time
------ ----------- ----------- --------- --------- ----------------
100.00    0.379372                158353     13028 total

সাথে dash:

$ strace -cf bash -c 'for i in $(seq 1 1000); do dash -c ":"; done'
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 73.88    0.008543           4      2004      1002 wait4
 25.35    0.002932           3      1002           clone
  0.62    0.000072           0      9026           rt_sigprocmask
  0.10    0.000011           0      1002           rt_sigreturn
  0.05    0.000006           0     15027           rt_sigaction
  0.00    0.000000           0      1037           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0      2011           open
  0.00    0.000000           0      2017           close
  0.00    0.000000           0      2040        17 stat
  0.00    0.000000           0      2011           fstat
  0.00    0.000000           0      8025           mmap
  0.00    0.000000           0      3012           mprotect
  0.00    0.000000           0      1004           munmap
  0.00    0.000000           0      3049           brk
  0.00    0.000000           0      3020      3008 access
  0.00    0.000000           0         1           pipe
  0.00    0.000000           0         1           dup2
  0.00    0.000000           0      1001           getpid
  0.00    0.000000           0         1         1 getpeername
  0.00    0.000000           0      1002           execve
  0.00    0.000000           0         1           uname
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0        13           getuid
  0.00    0.000000           0        13           getgid
  0.00    0.000000           0      1013           geteuid
  0.00    0.000000           0        13           getegid
  0.00    0.000000           0      1001           getppid
  0.00    0.000000           0         1           getpgrp
  0.00    0.000000           0      1002           arch_prctl
  0.00    0.000000           0         1           time
------ ----------- ----------- --------- --------- ----------------
100.00    0.011564                 60353      4028 total

প্রতিটি পুনরাবৃত্তি কেবল শেল শুরু করে এবং কোনও অপ-অপারেটর - কোলন দিয়ে কিছুই না করে তারপরে প্রস্থান করুন।

ফলাফল প্রদর্শন হিসাবে, প্রারম্ভের dashতুলনায় অত্যন্ত দ্রুত bashdashছোট, এবং এর চেয়ে কম ভাগ করা লাইব্রেরি উপর নির্ভর করে bash:

$ du -s /bin/bash 
956 /bin/bash

$ du -s /bin/dash 
108 /bin/dash

$ ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007fffc7947000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f5a8110d000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5a80f09000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5a80b7d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5a81352000)

$ ldd /bin/dash
    linux-vdso.so.1 =>  (0x00007fff56e5a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb24844c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb2487f3000)

এটি প্রারম্ভকালীন সময় সম্পর্কে, কীভাবে পরিচালনা করা যায়। আরেকটি মানদণ্ড করা যাক:

$ time dash -c 'for i in $(seq 1 1000000);do [ 1 = 1 ];done'

real    0m2.684s
user    0m2.728s
sys     0m0.100s

$ time bash -c 'for i in $(seq 1 1000000);do [ 1 = 1 ];done'

real    0m6.996s
user    0m6.820s
sys     0m0.376s

সাধারণ পরীক্ষা সহ 1 = 1, dashএখনও অনেক দ্রুত bash


আপনার উত্তরটি খুব প্রশংসা করা হয়েছে, তবে মনে হচ্ছে আপনি কেবল মাপছেন যে শেল শুরু হওয়ার থেকে কত দ্রুত, এটি ঠিক কতটা দ্রুত চালায় না, তাই না?
তেরেসা ই জুনিয়র

1
@ তেরেসি জুনিয়র: হ্যাঁ, আমি কেবল সূচনা সময়ের কথা উল্লেখ করি।
cuonglm

আমার ধরে নেওয়া seq 1 100000উচিত seq 1 1000?
মাইকেল

1
তবে আপনার dashপরীক্ষার ক্ষেত্রে এটিই কি seq 1 1000?
মাইকেল

ওহ, দুঃখিত, এটি 1000স্টার্টআপ এবং অপারেটের 1000000জন্য, স্থির।
কিউনগ্লাম

7

একটি শংসাপত্রিত ইউনিক্স (ম্যাক ওএস এক্স 10.10.3) এ বিভিন্ন শেলের কিছু শুরু করার সময় এখানে রয়েছে। আমি লুপগুলি নিয়ন্ত্রণ করতে tcsh ব্যবহার করার জন্য পরীক্ষাটি পুনরায় লিখেছিলাম যাতে পরীক্ষা করা শেলটি লুপগুলি নিয়ন্ত্রণ করে না। প্রতিটি শেলের জন্য সময়টি পূর্বে পাঁচবার লুপটি কার্যকর করা হয়, যাতে শেলটি কার্যকরযোগ্য এবং স্ক্রিপ্টগুলি ক্যাশে রয়েছে তা নিশ্চিত করতে।

যেমন আপনি দেখতে পাচ্ছেন, কোনও পরিষ্কার কাটা বিজয়ী নেই, তবে এর মধ্যে একটি নিশ্চিত পরাজিত রয়েছে। যাইহোক, ব্যাশ 4 ব্যাশের চেয়ে স্পষ্টভাবে ধীর 3. , এবং ইউনিক্স-জমিতে একটি ডি-ফ্যাক্টো স্ট্যান্ডার্ড (জিএনইউ / লিনাক্স-ল্যান্ডে না থাকলে); এটি পসিক্স শেল কার্যকারিতা একটি সুপারসেট সরবরাহ করে (যতদূর আমি বুঝতে পারি, পসিক্স শেলটি ksh88 এর উপর ভিত্তি করে ছিল); এটি ইন্টারেক্টিভ শেল হিসাবে বাশের সমান, যদিও টিসিএসের তুলনায় পিছিয়ে। এবং হারা অবশ্যই zsh হয়।

/bin/bash is v3.2.57(1)
/usr/local/bin/bash is v4.3.33(1)
dash is v0.5.8
ksh is v93u+
mksh is vR50f
pdksh is v5.2.14
/opt/heirloom/5bin/sh is from SysV
yash is v2.37
zsh is v5.0.5

% cat driver.csh 
#!/bin/tcsh

foreach s ( $* )
    echo
    echo "$s"
    foreach i ( `seq 1 5` )
        ./simple_loop.csh "$s"
    end
    /usr/bin/time -p ./simple_loop.csh "$s"
end

% cat simple_loop.csh 
#!/bin/tcsh

set shell = `which ${1}`
foreach i ( `seq 1 1000` )
    ${shell} -c ":"
end

% ./driver.csh /bin/bash /usr/local/bin/bash dash ksh mksh pdksh /opt/heirloom/5bin/sh yash zsh 
/bin/bash
real         4.21
user         1.44
sys          1.94

/usr/local/bin/bash
real         5.45
user         1.44
sys          1.98

dash
real         3.28
user         0.85
sys          1.11

ksh
real         3.48
user         1.35
sys          1.68

mksh
real         3.38
user         0.94
sys          1.14

pdksh
real         3.56
user         0.96
sys          1.17

/opt/heirloom/5bin/sh
real         3.46
user         0.92
sys          1.11

yash
real         3.97
user         1.08
sys          1.44

zsh
real        10.88
user         3.02
sys          5.80

আমার উপসংহারটিও ksh93 ব্যবহার করছিল। এটি সাধারণ পাবলিক লাইসেন্সের আওতায় রয়েছে, যা এফএসএফ দ্বারা অনুমোদিত হয়েছে।
তেরেসা ই জুনিয়র

0

এখানে অনেক উত্তরে অনেকগুলি অন্যায্য পরীক্ষার মামলা রয়েছে। যদি দুটি শেল পরীক্ষা করে থাকে তবে সেগুলির প্রতিটিটির জন্য সঠিক বাক্য গঠন ব্যবহার করুন। এবং ব্যাশে ডাবলব্রেকেটগুলি সিঙ্গলব্রেকেটগুলির তুলনায় অনেক দ্রুত এবং বেশি নির্ভরযোগ্য, তাই গতির পার্থক্য একেবারে কম। অপ্টিমাইজড বাশিজমগুলিও ব্যবহার করুন এবং তারপরে এই গতির পার্থক্যগুলিও খুব কম। আমার সিস্টেমে বাশ ভারী ব্যবহার সহ নরকের মতো চলে runs এবং ড্যাশগুলিতে পসিক্স সমতুল্যগুলি এখানে ধীর। এটি সঠিক নয় যে ড্যাশ সবসময় ব্যাশের চেয়ে একাধিকবার দ্রুত থাকে। সত্যিই দুজনের মধ্যে পিক্সিক কমান্ড লাইনগুলির তুলনা করা বেশ অন্যায়, যারা ড্যাশ সবসময় দ্রুততম হতে পারে। আমার দৃষ্টিতে পোস্টিক্স ভারী পুরানো। এবং সামঞ্জস্যের ক্ষেত্রে, প্রাসঙ্গিক সিস্টেমগুলি আজকাল পাওয়া সত্যিই কঠিন, তারা কোনও ব্যাশ শেল ব্যবহার করেনি।

একটি ভাল তুলনা হ'ল: প্রতিটি শেলের সেরা কমান্ড লাইনটি ব্যবহার করে একটি নির্দিষ্ট কাজ শেষ করতে। কেবল একই কমান্ড লাইন নয়, যখন কেবলমাত্র একটি শেলের এখানেই সুবিধা রয়েছে। এর তুলনাগুলি অবিশ্বাস্য এবং প্রতিযোগীদের আসল অভিনয় প্রদর্শন করে না। আমি আমার প্রতিদিনের চাকরিতে দেখি, অনেকগুলি ব্যবহারের ক্ষেত্রে কোন শেলটি দ্রুত।

উদাহরণ হিসেবে বলা যায়, সব প্রতিস্থাপন aসঙ্গে স্ট্রিং অক্ষর bঅক্ষর, ব্যাশ আপনি লিখতে পারেন "${varname//a/b}"যখন ড্যাশ মধ্যে আপনি ভালো বহিরাগত টুল কল করতে হবে: "$(echo "$varname" | sed 's/a/b/g')"। আপনার যদি এটি কয়েকশবার পুনরাবৃত্তি করতে হয় - বাশিজম ব্যবহার করা আপনাকে 2x স্পিডআপ দিতে পারে।


3
বাশ কীভাবে পারফরম্যান্স ফাঁক বন্ধ করতে পারে বা সমমানের কার্যগুলিতে আরও দ্রুত হতে পারে তা দেখানোর জন্য আপনার উত্তরটি আপডেট করার মতো কোনও উদাহরণ রয়েছে কি? নির্দিষ্ট উত্তরগুলির সাথে আপনার উত্তরটি আরও শক্তিশালী হবে।
এরিক রেনৌফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.