Библиотека Go для собеса | вопросы с собеседований
6.88K subscribers
229 photos
8 videos
1 file
452 links
Вопросы с собеседований по Go и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/0b524a15

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
💬Один из частых вопросов на собесах: «Что такое конкурентность в Go?»

Сначала надо вспомнить о таких вещах, как асинхронность и параллельность.

📌Асинхронность говорит о порядке исполнения кода. Вычисления в системе могут идти двумя способами:
— когда код выполняется последовательно — синхронно;
— когда результат выполнения кода доступен не сразу, а через некоторое время в виде некоторого асинхронного (нарушающего обычный порядок выполнения) вызова, — асинхронно.

📌Параллельность в свою очередь говорит о том, что физически происходит несколько процессов одновременно.

При этом, с точки зрения кода программы это всё может выглядеть вполне синхронно. Например, если подряд вызываются две функции, то исполняющая среда может решить по каким-то признакам, что эти функции независимы, и выполнить их параллельно. С точки зрения программы этого заметно не будет.

На практике, конечно, эти понятия пересекаются очень часто, потому что асинхронные вызовы делаются как раз для того, чтобы исполнять функции параллельно с основным кодом. То есть, асинхронные вызовы — самый распространённый способ управления распараллеливанием на уровне кода.

📌Конкурентность обеспечивает выполнение нескольких задач посредством переключения контекста.

Конкурентные вычисления реализуются на одном ядре системы. Примитивы конкурентности в Go:
— горутины;
— каналы;
— мьютексы (объекты Mutex, RWMutex);
— оператор select … case;
— объекты waitGroup, errGroup.

Конкурентность позволяет увеличить скорость обработки данных при наличии ресурсов, если выполнять те же задачи, которые можно выполнять последовательно.
🔥7👍411