Dalam bash
skrip saya membutuhkan berbagai nilai dari /proc/
file. Sampai sekarang saya memiliki lusinan baris yang melihat file secara langsung seperti itu:
grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo
Dalam upaya untuk menjadikannya lebih efisien, saya menyimpan konten file dalam sebuah variabel dan memahami bahwa:
a=$(</proc/meminfo)
echo "$a" | grep -oP '^MemFree: *\K[0-9]+'
Alih-alih membuka file beberapa kali ini hanya harus membukanya sekali dan mengambil konten variabel, yang saya anggap akan lebih cepat - tetapi sebenarnya lebih lambat:
bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null
real 0m0.803s
user 0m0.619s
sys 0m0.232s
bash 4.4.19 $ a=$(</proc/meminfo)
bash 4.4.19 $ time for i in {1..1000};do echo "$a"|grep ^MemFree; done >/dev/null
real 0m1.182s
user 0m1.425s
sys 0m0.506s
Hal yang sama berlaku untuk dash
dan zsh
. Saya mencurigai keadaan khusus /proc/
file sebagai alasan, tetapi ketika saya menyalin konten /proc/meminfo
ke file biasa dan menggunakannya hasilnya sama:
bash 4.4.19 $ cat </proc/meminfo >meminfo
bash 4.4.19 $ time for i in $(seq 1 1000);do grep ^MemFree meminfo; done >/dev/null
real 0m0.790s
user 0m0.608s
sys 0m0.227s
Menggunakan string di sini untuk menyimpan pipa membuatnya sedikit lebih cepat, tetapi masih tidak secepat file:
bash 4.4.19 $ time for i in $(seq 1 1000);do <<<"$a" grep ^MemFree; done >/dev/null
real 0m0.977s
user 0m0.758s
sys 0m0.268s
Mengapa membuka file lebih cepat daripada membaca konten yang sama dari suatu variabel?
/proc/
file sebagai alasan, tapi ketika saya menyalin isi dari /proc/meminfo
sebuah file biasa dan penggunaan yang hasilnya sama:” Hal ini tidak khusus untuk /proc/
file, membaca file biasa juga lebih cepat!