Loop shell lambat dan bash adalah yang paling lambat. Kerang tidak dimaksudkan untuk melakukan pekerjaan berat di loop. Shell dimaksudkan untuk meluncurkan beberapa proses eksternal dan dioptimalkan pada kumpulan data.
Ngomong-ngomong, saya penasaran bagaimana perbandingan shell jadi saya membuat sedikit patokan:
#!/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
(
Detail:
- CPU: Intel (R) Core (TM) i5 CPU M 430 @ 2.27GHz
- ksh: versi sh (Penelitian AT&T) 93u + 2012-08-01
- bash: GNU bash, versi 4.3.11 (1) -release (x86_64-pc-linux-gnu)
- zsh: zsh 5.2 (x86_64-unknown-linux-gnu)
- tanda hubung: 0.5.7-4ubuntu1
)
Hasil (disingkat) (waktu per iterasi) adalah:
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
Dari hasil:
Jika Anda ingin loop shell sedikit lebih cepat, maka jika Anda memiliki [[
sintaks dan Anda ingin loop shell cepat, Anda berada di shell maju dan Anda juga memiliki C-seperti untuk loop. Gunakan C suka untuk loop, lalu. Mereka bisa sekitar 2 kali lebih cepat dari while [
-Loop di shell yang sama.
- ksh memiliki
for (
loop tercepat sekitar 2,7 μs per iterasi
- dash memiliki
while [
loop tercepat sekitar 5,8 μs per iterasi
C untuk loop dapat menjadi 3-4 desimal dari besarnya lebih cepat. (Saya mendengar cinta Torvalds C).
C untuk loop yang dioptimalkan adalah 56500 kali lebih cepat dari while [
loop bash (loop shell paling lambat) dan 6750 kali lebih cepat dari for (
loop ksh (loop shell tercepat).
Sekali lagi, lambatnya shell seharusnya tidak terlalu menjadi masalah, karena pola khas shell adalah untuk membongkar beberapa proses program eksternal yang dioptimalkan.
Dengan pola ini, kerang sering membuatnya jauh lebih mudah untuk menulis skrip dengan kinerja lebih unggul daripada skrip python (terakhir kali saya memeriksa, membuat proses pipa dengan python agak canggung).
Hal lain yang perlu dipertimbangkan adalah waktu startup.
time python3 -c ' '
membutuhkan 30 hingga 40 ms pada PC saya sedangkan cangkang memakan waktu sekitar 3ms. Jika Anda meluncurkan banyak skrip, ini dengan cepat bertambah dan Anda dapat melakukan sangat banyak dalam 27-37 ms ekstra yang dibutuhkan python hanya untuk memulai. Skrip kecil dapat diselesaikan beberapa kali dalam jangka waktu tersebut.
(NodeJs mungkin runtime scripting terburuk di departemen ini karena dibutuhkan sekitar 100 ms hanya untuk memulai (meskipun begitu sudah dimulai, Anda akan sulit sekali menemukan pemain yang lebih baik di antara bahasa scripting)).