Subkulit memang memiliki overhead.
Di sistem saya, biaya fork-exec minimal (saat Anda menjalankan program dari disk saat file tidak dingin) adalah sekitar 2ms
dan biaya forking minimal adalah sekitar 1ms
.
Dengan subkulit, Anda membicarakan biaya forking saja, karena tidak ada file yang perlu exec
ed. Jika subkulit dibuat rendah, 1ms
cukup diabaikan dalam program yang dihadapi manusia. Saya yakin manusia tidak dapat melihat apa pun yang terjadi lebih cepat dari 50ms
(dan itu cenderung memakan waktu lama bagi penerjemah bahasa scripting modern untuk memulai (saya berbicara python
dan ruby di rvm
di sini) dengan nodejs
terbaru menggunakan sekitar 100ms
).
Namun, itu bertambah dengan loop, dan kemudian Anda mungkin ingin mengganti misalnya bactick yang agak umum atau $()
pola tempat Anda return
sesuatu dari suatu fungsi dengan mencetaknya ke stdout untuk shell induk untuk catpure dengan bashisms seperti printf -v
(atau gunakan program eksternal cepat untuk memproses seluruh batch).
Paket penyelesaian-bash secara khusus menghindari biaya subkulit ini dengan mengembalikan melalui nama variabel yang diteruskan menggunakan teknik yang dijelaskan di http://fvue.nl/wiki/Bash:_Passing_variables_by_reference
Membandingkan
time for((i=0;i<10000;i++)); do echo "$(echo hello)"; done >/dev/null
dengan
time for((i=0;i<10000;i++)); do echo hello; done >/dev/null
harus memberi Anda perkiraan yang baik tentang apa fork
sistem Anda -ing overhead adalah.