Скільки затримки мають дві послідовні команди Linux, якщо вони виконуються у вигляді оболонки?


0

У мене є дві команди A і B. Я хочу виконати їх разом, але єдиним можливим способом в Linux є використання &. Це,

$ A &
$ B

Я не очікую 0 затримок двох команд, але приблизно, скільки я повинен очікувати? У діапазоні мілісекунд, мікросекунд чи наносекунд? Дякую.


Чому ви просто не спробуйте? Виконайте команду, яка виводить поточний час у мілісекундах на інший файл
Martheen Cahya Paulo

2
Або спробуйте GNU Parallel, щоб насправді запустити їх одночасно gnu.org/software/parallel
Martheen Cahya Paulo

@MartheenCahyaPaulo Виведення файлу займає додатковий час
повернення 0

Відповіді:


1

Зауважте, що будь-яка відповідь на це питання залежатиме від того, що саме система робить у будь-який момент. Наприклад:

  • Який планувальник ядер ви використовуєте (їх затримки відрізняються)
  • Які процеси ви виконуєте (всі вони змагаються за час, і планувальник може не вибирати, що ви будете процесами раніше, ніж вам хотілося б)

І, мабуть, тисяча інших речей. З цієї причини запустіть цей тест самостійно . Також зауважте, що наступне може помилятися багатьма найтоншими способами, оскільки я не дуже обізнаний у тому, щоб отримати найкращі можливі показники bash(ну, zshстрого кажучи, оскільки це моя оболонка для входу).


Маючи це на увазі, я придумав простий спосіб перевірити це. Дата GNU має спосіб відображення наносекунд (так, ви правильно це прочитали). Таким чином, щоб отримати купу даних, все, що вам потрібно зробити, це:

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

Це (окрім жування багатьох PID-файлів) призведе до отримання 10 000 рядкових файлів з інформацією про час. Потім ви можете використовувати наступний скрипт Python (v3.4), щоб отримати уявлення про те, яка середня різниця у часі:

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")

У моїй (Ubuntu 13.10, Linux 3.12.0-997-generic) системі це дає мені:

The median difference is 1.077483 milliseconds
The mean difference is 3.680928442211055 milliseconds

0

Ви виконуєте паралельні завдання. Не допускайте припущень щодо того, в якому порядку вони будуть працювати. Вони могли працювати в будь-якому порядку. B може навіть запустити до завершення до початку A. Тоді при наступному запуску ви можете отримати зовсім інші результати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.