wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Golang Concurrency

Total questions: 12

Worksheet time: 7mins

Name
Class
Date
1.

Как sync.Map отличается от обычной мапы в Go при использовании в многопоточной среде?

a)

Оптимизирован для сценариев с редкими обновлениями и частыми чтениями

b)

Всегда медленнее обычной мапы при любых операциях

c)

Синхронизирует горутины, обеспечивая порядок их выполнения

d)

Позволяет взять указатель на значение из мапы

2.

Чем горутины в Go отличаются от нативных потоков операционной системы?

a)

Горутины занимают значительно меньше памяти, чем потоки

b)

Горутины не поддерживают параллельное выполнение

c)

Горутины не используют память стека

d)

Горутины требуют явного управления памятью

3.

Что произойдет, если попытаться писать в закрытый канал или читать из закрытого канала?

a)

Возврат ошибки из функции.

b)

Паника при попытке записи, чтение из закрытого канала возвращает нулевое значение для типа канала.

c)

Блокировка горутины.

d)

Ничего, операции проходят без ошибок.

4.

Какие существуют способы синхронизации между горутинами? (Несколько правильных ответов)

a)

Каналы

b)

Пакет sync

c)

Event Loop

d)

Вызов горутины с ключевым словом await

5.

Для чего используется слияние каналов (merge channels)?

a)

Для увеличения скорости передачи данных путем распараллеливания отправки данных по нескольким каналам.

b)

Для уменьшения числа каналов, которые программа должна мониторить, объединяя несколько каналов в один.

c)

Для реализации graceful shutdown и ожидания завершения всех горутин

d)

Для создания нового канала, который автоматически закрывается, когда все входные каналы закрыты.

6.

В чем различие между использованием мьютексов и атомиков?

a)

Атомики быстрее и предпочтительнее для управления простыми переменными.

b)

Мьютексы лучше подходят для сложных структур данных.

c)

Мьютексы контролируют доступ к блоку кода, атомики - к конкретным переменным.

d)

Все перечисленное.

7.

В чем ключевое отличие между sync.Mutex и sync.RWMutex?

a)

sync.RWMutex медленнее sync.Mutex из-за дополнительных операций управления блокировками.

b)

sync.RWMutex позволяет нескольким горутинам одновременно читать данные, а sync.Mutex — нет.

c)

sync.Mutex позволяет нескольким горутинам одновременно читать данные, а sync.RWMutex — нет.

d)

sync.Mutex предназначен исключительно для операций записи.

8.

Как можно использовать sync.WaitGroup чтобы завершить одну группу задач, прежде чем запустить другую?

a)

Использовать метод Wait() чтобы подождать первую группу задач перед запуском второй группы

b)

Создавать экземпляр sync.WaitGroup отдельно на каждую задачу

c)

Запускать все горутины сразу и использовать метод Done() только для первой группы задач

d)

Лучше не использовать sync.WaitGroup, а вручную объявить счетчик с типом <strong>int</strong>

9.

Для чего в Go используется пакет context? (Несколько правильных ответов)

a)

Для передачи информации в формате ключ=значение

b)

Для управления временем выполнения и отмены запросов и операций

c)

Для управления файлами конфигурации

d)

Для добавления информации к возвращаемой ошибке

10.

Как ограничить количество горутин, которые могут одновременно обращаться к общему ресурсу?

a)

Использовать пакет sync/atomic для счетчика горутин.

b)

Использовать мьютексы.

c)

Использовать буферизованные каналы с "токенами доступа"

d)

Использовать семафор из пакета sync.

11.

Как реализуется Graceful Shutdown в Go-приложении?

a)

Используя context для контролирования завершения работы сервисов

b)

Путем немедленного завершения всех горутин

c)

Удалением всех временных файлов, созданных приложением

d)

Через использование os.Exit(0)

12.

Для чего в Go используются мьютексы?

a)

Для контроля доступа к разделяемой переменной между горутинами

b)

Для создания группы задач которые мы хотим выполнить конкурентно

c)

Для восстановления после паники в конкретной горутине

d)

Для управления порядком выполнения горутин