Українська девопсарня
3.49K subscribers
82 photos
15 videos
5 files
468 links
Download Telegram
Паралельність у баші це прям first-class citizen. Трішечки простіших прикладів.

Якщо нам треба послідовно прочитати з двох процессів, то можна виконати щось на кшталт

Дебаг функція (простіше читати ніж strace)

log_with_sleep() {
local label=$1
echo "$(date +"%H:%M:%S.%3N") starting${label}"
sleep 1
echo "$(date +"%H:%M:%S.%3N") end${label}"
}


Простий приклад послідовного виконування і читання (увага на дату):

(log_with_sleep "-1"; log_with_sleep "-2") | cat
# 10:08:06.474 starting-1
# 10:08:07.482 end-1
# 10:08:07.488 starting-2
# 10:08:08.498 end-2


Але якщо ми хочемо послідовно прочитати, але виконувати функції паралельно, то можна зробити так:

cat <(log_with_sleep 1) <(log_with_sleep 2)
# 10:10:05.529 starting1
# 10:10:06.538 end1
# 10:10:05.529 starting2
# 10:10:06.537 end2


А якщо треба паралельно читати і паралельно виконувати то можна зробити дуже просто:


(log_with_sleep "-1" & log_with_sleep "-2"& wait) | cat
# 10:11:43.079 starting-1
# 10:11:43.080 starting-2
# 10:11:44.094 end-1
# 10:11:44.094 end-2



Усе це можна комибінувати


(log_with_sleep "1"; cat <(log_with_sleep "2") <(log_with_sleep "3"); (log_with_sleep "3" & log_with_sleep "4" & wait); log_with_sleep "5") | cat
# 10:30:25.737 starting1
# 10:30:26.748 end1
# 10:30:26.754 starting2
# 10:30:27.763 end2
# 10:30:26.754 starting3
# 10:30:27.765 end3
# 10:30:27.773 starting3
# 10:30:27.775 starting4
# 10:30:28.786 end4
# 10:30:28.789 end3
# 10:30:28.796 starting5
# 10:30:29.805 end5


#bash@UkropsDigest #concurency@UkropsDigest #tricks@UkropsDigest
👍47🤔16🔥12🤯62