Перейти к содержимому

Конкурентность и горутины

Вопросов: 208 из 72 собеседований. Источник указан в заголовке группы.

  • Что такое горутина? — встречается 5×
  • Как работает горутина? — встречается 2×
  • В чем разница между конкурентностью и параллелизмом? — встречается 2×
  • Как работает планировщик в Go? — встречается 2×
  • Как работать с малой в условиях конкурентности? — встречается 2×
  • Можно ли отловить панику в горутине из другой горутины? — встречается 2×
  • Что такое горутина?
  • Почему можно запустить 1000+ горутин при лимите ОС в 4-8 потоков?
  • Из-за чего горутина может блокироваться?
  • Чем отличается конкурентное выполнение от параллельного?
  • Как в Go реализовать конкурентный доступ к общей переменной без гонок данных?
  • Как бы вы реализовали worker pool на Go?
  • Что такое модель планировщика GMP?
  • Что такое утечка горутин и как ее обнаружить?
  • Какие состояния бывают у горутины?
  • Что такое local run queue и global run queue в планировщике?
  • Что такое «голодание» в планировщике и как его избежать?
  • Memory allocation. Stack and heap a) Each goroutine allocates an expandable stack b) Pointers and the structures they point to escape to the heap c) Garbage collector: mark & sweep algorithm
  • Channels. Purpose. Types of channels a) What is a channel under the hood? Usage patterns i) Buffered - works asynchronously ii) Unbuffered iii) Passing values between goroutines b) What happens if you write to a closed channel? i) Panic c) What happens if you read from a closed channel? i) Default value d) Non-blocking write/read to a channel? i) select case ii) How to check if a channel is closed? iii) if v, ok:= <-channel; ok e) What does len(chan) of a unidirectional channel return? i) The number of elements in the channel
  • Concurrency a) What are goroutines? How are they structured? How many goroutines can there be? Ratio of goroutines to the number of processors i) A goroutine is a function executed in parallel with others ii) Created via go + function call iii) Lightweight (~2 KB of memory) iv) Preemptive multitasking b) The runtime package i) Documentation: pkg.go.dev/runtime ii) runtime.NumGoroutine() - returns the number of goroutines iii) StartTrace() and StopTrace() - execution tracing c) Communication between goroutines i) Using context.Context for lifecycle management d) Ways to control goroutine execution (WaitGroup, ErrorGroup) i) sync.WaitGroup - waiting for a group of goroutines to finish
  • Goroutine leaks. How to avoid them? a) Goroutines run independently of main b) Infinite loops without exit conditions c) Explicit termination via channels or context d) Using sync.WaitGroup

Вопросы: стандартные вопросы про горутины, каналы, пакет sync и рантайм Go.

  • как при этом будет работать P с горутинами в этой задаче?
  • В чем разница между кооперативной и вытесняющей многозадачностью?
  • Почему в Go используются горутины, а не потоки?
  • Конкурентность vs. параллельность.
  • Поток, горутина: отличия.
  • Типы многозадачности. Вытесняющая многозадачность: зачем добавили?
  • Контекст: как отмена влияет на горутины? Как проверить контекст?
  • Как доработать код, чтобы вывело оба числа?
  • Как работает планировщик, как устроены очереди?
  • Что такое concurrency и планировщик?
  • Что такое параллельность и конкурентность в Go?
  • Что такое планировщик?
  • Почему горутины легче и дешевле потоков?
  • Что будет когда Go программа запущена в системе с одним ядром и в ней запускается 20 горутин, и одна из горутин начала выполнять тяжелую задачу?
  • В Go реализована вытесняющая или кооперативная многопоточность?
  • Как предупредить утечку горутин?
  • Как оптимизировать чтобы не запускать все 50 тысяч горутин?
  • Сколько ресурсов потребляет управление одной горутиной? (около 0.15% cpu на 100 горутин)
  • Безопасна ли стандартная map для конкурентного использования из нескольких горутин без дополнительной синхронизации?
  • Как работает горутина?
  • Вопрос про case condition. Что будет, если 2 горутины пытаются получить доступ к одной переменной?
  • что такое дата рейс, а просто рейс?
  • как синхронизировать горутины
  • Реализовать worker pool для параллельной обработки запросов к различным ресурсам
  • Что такое утечка горутин и как ее предотвратить?
  • Что такое горутина и чем она отличается от потока?
  • Для создания горутины в Go требуется около 2 КБ памяти, тогда как для потока - несколько мегабайт. Из чего складывается эта разница в потреблении памяти?
  • Может ли одновременно работать больше горутин, чем имеется ядер процессора?
  • Что произойдет при попытке отправить данные в небуферизированный канал без предварительного запуска горутины для чтения?
  • Что такое горутина и как работает планировщик в Go?
  • Как проводится переключение горутин?
  • Почему горутины потребляют очень мало ресурсов относительно тредов ос?
  • Стек горутины всегда занимает 2кб?
  • What ’s the point of forking the process if Goroutine is much more lightweight?
  • When Goroutine wakes up after it was blocked, does it migrate to another thread?
  • Standard questions about Go: slices, maps, goroutines, channels, escape analysis;
  • Что такое context в Go и как он связан с отменой горутин?
  • Если в одном потоке был открыт файл, то можно передать хендлер в другой поток?
  • Что такое горутина в Go и как она соотносится с тредами ОС?
  • Что такое горутина? Для чего используется?
  • Как синхронизировать горутины? Какой метод используешь чаще?
  • Как отловить панику в горутине?
  • Как реализовать пул воркеров на Go?
  • Чем отличаются горутины от потоков?
  • Можно ли влиять на работу планировщика?
  • What happens in the code when you write go and a goroutine?
  • There are three goroutines where run is blocked. How to make the steady function simultaneously unblock all three runs?
  • Complete the code so that the task runs asynchronously with a limit on the number of simultaneous requests
  • Как отдаются значения с одной горутины в другую?
  • Размер стека у горутины?
  • Допустим есть 100 операций расчета квадратного корня. Если их запустить в 100 горутинах, то получим ли мы прирост по производительности?
  • Что такое gorutine? Для чего используют?
  • Что будет, если вызвать несколько gorutine в main и не ждать их завершения?
  • При обработке гигабайт данных в горутине, где хранятся эти данные?
  • В чем разница между конкурентностью и параллелизмом?
  • Расскажи про горутины? Как устроены?
  • Какие способы синхронизации горутин знаешь?
  • Что такое горутина? Кем управляеться горутина?
  • Почему wg.Add(1) нельзя делать прямо в начале ожидаемой горутины?
  • В какой последовательности в представленной программе отработают запущенные горутины?
  • Какие проблемы могут быть, если в представленной программе в urls будет 100k урлов?
  • Как можно обойти эти проблемы?
  • Расскажите про планировщик.
  • Что такое горутина?
  • В какой момент происходит переключение горутин?
  • Какой-то странный вопрос про поведение планировщика при сетевых запросах.
  • Что происходит с горутиной, когда она блокируется на чтении файла?
  • Какие отличия между сетевым запросом и чтением из файла с точки зрения планировщика?
  • Исправь представленную программу, чтобы как только какая-нибудь горутина ответила с ошибкой, то программа завершилась.
  • Что будет, если в программе мы будем читать по ключу «a», а писать по ключу «b»?
  • Про планировщик что знаешь?
  • Как планировщик работает с каналами? Где находятся горутины которые ждут чтение/запись в канал?
  • Расскажи про голодающие горутины;
  • Проверяет баланс пользователей;
  • Как защитить баланс от гонки, но чтобы в этот момент его получение было доступно из других параллельных запросов?
  • Как ускорить или отказаться от проверки “if sourceAccount.Balance >= amount”
  • В структуре Account какие могут быть проблемы?
  • Делаем нагрузочное тестирование. Данные с запросов мы складываем в in-memory хранилище. Что лучше юзать: каналы или мьютексы? Что будет работать быстрее?
  • Что можешь рассказать про GMP модель?
  • Как работает планировщик в Go?
  • Что такое горутина?
  • Какие существуют механизмы очистки одной горутины?
  • Как работает планировщик в Go?
  • Для чего нужны горутины? Почему нельзя использовать просто потоки?
  • Какие режимы есть у планировщика?
  • Что такое горутина? В чем ее преимущество перед потоками?
  • За счет чего обеспечивается «бесплатность» коммуникации между горутинами?
  • Всегда ли эффективно решать задачу с помощью горутины? В каких случаях они не дадут выигрыш?
  • Как классифицировать операции, с которыми работают горутины? В каком случае будет преимущество?
  • Что такое стек горутины?
  • Горутины, планировщики как работают? По каким критериям горутины переключаются? В каких случаях рекомендуется использовать горутины?
  • Гошка: что такое горутины, примитивы синхронизации, что такое мапа, как устроена, всякие эвакуации, решения коллизий и т. п.
  • Каналы могут использоваться для передачи данных между горутинами, тогда как массивы исключительно для хранения данных;
  • Чтобы управлять памятью горутин;
  • Чтобы ускорить выполнение горутин;
  • Чтобы контролировать выполнение горутин;
  • Для обмена данными между горутинами.
  • Она удаляет текущую горутину;
  • Она создает новую горутину;
  • Она позволяет другим горутинам выполняться;
  • Она прерывает выполнение текущей горутины;
  • Она устанавливает приоритет текущей горутины.
  • Что такое горутина в Go?;
  • Легковесные потоки;
  • Есть функция copy, она вызывает batchCopy и нужно сделать чтобы она возвращала прогресс копирования, нужно чтобы можно было ее отменить, чтобы если кто-то не захочет читать прогресс чтобы она не блокировaaлась
  • Входит ли системная горутина sysmon в лимит потоков, заданный GOMAXPROCS?
  • Давать возможность «зарезервировать» ресурсы под заявку, чтобы не было гонки при параллельных запросах;
  • Как реализован параллелизм в Go и какие средства синхронизации есть?
  • Подробно про многопоточность;
  • Можешь рассказать про многопоточность и параллельность в Go?
  • Какая свять между процессом, тредом и горутиной?
  • Какие способы общение между горутинами и какие проблемы могут возникнуть?
  • Почему у мьютекса и атомика нет проблем с конкурентностью?
  • Какие есть особенности конкурентной записи в мапу?
  • В чем отличие параллелизма от конкурентности?
  • используя функцию printNumber, последовательно напечатать числа от 1 до 10;
  • измените код в main так, чтобы распараллелить печать;
  • изменить программу так, чтоб одновременно выводились по 5 чисел.
  • Что используется для передачи данных между горутинами?
  • Что такое горутины? Зачем они нужны?
  • Чем отличается горутина от системных тредов?
  • Как шедулер переключает горутины?
  • Как горутины общаются между собой и синхронизируются?
  • Что такое горутина?
  • Какие паттерны конкурентности вы использовали в работе?
  • Как вы отслеживаете дедлоки при работе с горутинами?
  • Есть ли опыт настройки планировщика? Для чего может потребоваться настройка планировщика?
  • Какие состояния могут быть у горутины?
  • Как работает конкурентность в Го? В какие моменты происходит переключение между горутинами?
  • Если GOMAXPROCS=1 и происходит syscall в горутине, но если другие, работа программы останнавливается?
  • В чем разница между процессом ОС и горутиной?
  • Что такое конкурентность и она устроена в Go?
  • Всегда ли код в Go выполняется параллельно?
  • Как работает шедулер? Что такое GMP модель?
  • Как реализовать конкурентную запись в хэш-таблицу в Golang?
  • подумать о многопоточности (если сразу это не уточнил и не сделал).
  • Что такое горутина в контексте Go?
  • Можно ли один и тот же byte slice в нескольких горутинах? А зачем так делать? )
  • О чем нужно позаботиться, когда стартуешь горутину?
  • Как контролировать жизненный цикл горутины?
  • Какие сложности возникают при работе со слайсом из нескольких горутин?
  • Сколько горутин максимально можно запустить? Что знаешь про GMP модель?
  • Как сделать graceful shutdown? Как дождаться, чтобы все горутины завершили работу (https://habr.com/ru/articles/771626/ )
  • Расскажи про горутины
  • Чем отличается конкурентность от многопоточности?
  • Какой начальный размер стека выделяется при создании новой горутины в Go?
  • Какой максимальный размер стека может быть у горутины?
  • Что произойдет, если горутина попытается выделить слишком много памяти под стек?
  • Был ли у вас опыт осознанного использования блокировок в PostgreSQL для защиты данных от конкурентного изменения?
  • Разница между асинхронностью и многопоточностью?

Wildberries / WB - 4 (Команда поставщиков) — 1 кв 2025

Заголовок раздела «Wildberries / WB - 4 (Команда поставщиков) — 1 кв 2025»
  • Как работать с малой в условиях конкурентности?
  • Можно ли отловить панику в горутине из другой горутины?
  • Чем отличается concurrency от параллелизма, можно ли быть параллелизм на 1 ядре?

Wildberries / WB - 5 (Команда спецпроектов) — 1 кв 2025

Заголовок раздела «Wildberries / WB - 5 (Команда спецпроектов) — 1 кв 2025»
  • Как работать с малой в условиях конкурентности?
  • Зачем нужны горутины и что это такое?
  • Почему горутины легковесные?
  • Чем ограничьено создание горутин? Сколько можно создать?
  • Расскажи про GMP;
  • Что происходит с горутиной, если она делает сетевой вызов?
  • Можно ли отловить панику в горутине из другой горутины?
  • Что такое кооперативная и вытесняющая многозадачность?
  • Как устроен планировщик в Go? Расскажи про GMP модель
  • GMP модель
  • Какая изоляция в потоках?
  • Какие проблемы могут возникнуть при многопоточной работе?
  • Что такое thread pool, какого он размера и зачем он нужен?
  • Что происходит, когда вы отправляете данные из горутины в сетевое соединение?
  • Что такое рейс-кондишн?
  • Как бороться?
  • Как запустить N задач в параллель в Go?
  • В какой момент запустится горутина?
  • С помощью wait group - что произойдет, если сделать wg.Add(1) внутри каждой горутины, а не перед их запуском?
  • Как получить результаты из горутин?
  • Условно бесконечный.
  • Источник никогда не возвращает более MaxItems записей за один вызов Next.
  • В рамках одной «сессии»(одного вызова функции Pipe) источник каждый раз возвращает новые данные на каждый вызов Next.
  • Не может обработать более MaxItems за один раз.
  • Что такое горутина?
  • Как работает горутина?
  • Как управляется горутина?
  • Какой тип памяти у горутины?
  • Есть две глобальные горутины, каждая из них запускает десять своих подгорутин, выполняющих свою бизнес логику. Как можно реализовать механизм возврата в консистентное состояние, если в одной из этих десяти подгорутин произошла ошибка?
  • Что такое семафор в контексте конкурентного программирования?

МВД РФ (Паспортно-визовый сервис) — 4 кв 2025

Заголовок раздела «МВД РФ (Паспортно-визовый сервис) — 4 кв 2025»
  • Что такое планировщик в Go?
  • Что такое модель GMP? Для чего она?
  • Что такое горутина? Почему ее «бесплатно» переключать?
  • Предположите, возможна ли такая ситуация, что появляется столько горутин, что они начинают друг другу мешать? Как бы вы исправляли эту проблему?
  • Горутины и планировщик Go: базовые вопросы;
  • Как реализовано конкурентное программирование в Go?
  • В чем разница между конкурентностью и параллелизмом?
  • Как можно снаружи завершить выполнение горутины?
  • Как получить результаты из горутины?