Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!08.04.2024
Бібліотека conc в Golang
Вже другий пост задоволення бібліотекою github.com/sourcegraph/conc. Такі в ній гарні обгортки для типових задач рівночасності.
Цього разу — конкретно про модуль conc/pool
. Він реалізує абстракцію “запустити декілька задач рівночасно та почекати на результат”. Ніби для того достатньо стандартного sync.WaitGroup
, але то буде примітивне рішення. Доведеться вручну лічити задачі, збирати результати, обробляти помилки…
З conc/pool
достатньо запустити необхідні задачі викликом pool.Go()
, а потім зачекати — викликом pool.Wait()
. Є декілька модифікацій пула залежно від змісту задач: чи повертають вони результат, або помилку; чи потребують вони контекст (з особливою можливістю скасувати контекст після першої помилки.)
conc/pool
підходить для ситуацій, коли ми запускаємо різнорідні задачі — приблизно як Promise.all
в JavaScript. Та головне, що він робить використання рівночасності легше та простіше. Наприклад, якщо нам потрібно завантажити дві неповʼязані сторінки. Зазвичай така задача надто маленька, щоб розкладати її на горутіни, канали, і все інше. Але з conc/pool
майже нічого зайвого писати не доведеться. Просто чудова маленька абстракція.