Berapa banyak penundaan yang dimiliki dua perintah linux berurutan jika dijalankan sebagai shellscript?

0

Saya memiliki dua perintah A dan B. Saya ingin menjalankannya bersama, tetapi satu-satunya cara yang layak di linux adalah menggunakan & amp ;. Itu adalah,

$ A &
$ B

Saya tidak berharap 0 menunda dua perintah, tetapi kira-kira, berapa yang harus saya harapkan? Dalam milidetik, rentang mikrodetik atau nanodetik? Terima kasih.

return 0
sumber
Kenapa kamu tidak mencobanya saja? Jalankan perintah yang menampilkan waktu saat ini dalam milidetik ke file yang berbeda
Martheen Cahya Paulo
2
Atau coba GNU Parallel untuk benar-benar menjalankannya secara bersamaan gnu.org/software/parallel
Martheen Cahya Paulo
@MartheenCahyaPaulo Mengeluarkan file membutuhkan waktu ekstra
return 0

Jawaban:

1

Perhatikan bahwa jawaban apa pun untuk pertanyaan ini akan bergantung pada apa yang sebenarnya dilakukan sistem pada waktu tertentu. Sebagai contoh:

  • Penjadwal kernel apa yang Anda gunakan (latensinya berbeda)
  • Proses apa yang sedang Anda jalankan (semuanya bersaing untuk waktu, dan penjadwal mungkin tidak memilih proses Anda sedini yang Anda inginkan)

Dan mungkin seribu hal lainnya. Untuk alasan ini, jalankan tes ini sendiri . Perhatikan juga bahwa hal-hal berikut ini bisa salah dalam banyak hal yang halus, karena saya tidak terlalu berpengetahuan tentang mendapatkan kinerja terbaik dari bash (baik, zsh sebenarnya, karena itu shell login saya).


Dengan pemikiran ini, saya menemukan cara sederhana untuk menguji ini. Tanggal GNU memiliki cara untuk ditampilkan nanodetik (ya, Anda membacanya dengan benar). Jadi, untuk mendapatkan banyak data, yang perlu Anda lakukan adalah:

get_starting_diff() {
    date +%N & date +%N
}

# 5,000 iterations is probably good enough statistically
for iteration in $(seq 1 5000); do
    get_starting_diff
done > times

Ini akan (selain mengunyah banyak PID) menghasilkan 10.000 file baris, dengan informasi waktu di dalamnya. Anda kemudian dapat menggunakan skrip Python (v3.4) berikut untuk mendapatkan gambaran tentang perbedaan waktu rata-rata Anda:

def pairwise(iterator):
    "Takes an iterator and extracts sequential pairs from it"
    pair = []
    for item in iterator:
        pair.append(item)
        if len(pair) == 2:
            yield pair
            pair = []

diffs = []
with open('times') as data:
    for start1, start2 in pairwise(data):
        diffs.append(int(start2) - int(start1))

diffs.sort()
median = diffs[len(diffs) // 2]
mean = sum(diffs) / len(diffs)

print("The median difference is", median / 1000000, "milliseconds")
print("The mean difference is", mean / 1000000, "milliseconds")

Pada sistem saya (Ubuntu 13.10, Linux 3.12.0-997-generic), ini memberi saya:

The median difference is 1.077483 milliseconds
The mean difference is 3.680928442211055 milliseconds
new123456
sumber
0

Anda menjalankan tugas paralel. Jangan berasumsi tentang urutan apa yang akan mereka jalankan. Mereka bisa berjalan dalam urutan apa pun. B bahkan bisa berlari sampai selesai sebelum A dimulai. Kemudian pada saat Anda menjalankannya Anda bisa mendapatkan hasil yang sama sekali berbeda.

Emery Lapinski
sumber