tgoop.com »
United States »
Библиотека Go для собеса | вопросы с собеседований »
Telegram web »
Post 331
💬 Как использовать буферизированные каналы в качестве семафоров для ограничения выполнения горутин?
Когда нам нужно управлять тем, сколько горутин могут одновременно получить доступ к ресурсу, использование семафора является надежным подходом.
Мы можем создать семафор с использованием буферизированного канала, где размер канала определяет, сколько горутин могут работать одновременно.
Вот что происходит:
🔹 Горутина отправляет значение в канал, занимая один слот.
🔹 После выполнения своей задачи она удаляет значение, тем самым освобождая этот слот для другой горутины.
В примере:
🔹
🔹
☑️ Если нам нужен более чистый способ, мы могли бы создать тип Semaphore, который обрабатывает все действия, связанные с семафором.
☑️ Использование кастомного типа Semaphore упрощает управление доступом к ресурсам в наших функциях.
☑️ Также существует реализация семафора в пакете
Когда нам нужно управлять тем, сколько горутин могут одновременно получить доступ к ресурсу, использование семафора является надежным подходом.
Мы можем создать семафор с использованием буферизированного канала, где размер канала определяет, сколько горутин могут работать одновременно.
Вот что происходит:
🔹 Горутина отправляет значение в канал, занимая один слот.
🔹 После выполнения своей задачи она удаляет значение, тем самым освобождая этот слот для другой горутины.
В примере:
🔹
wg.Add(10)
: готовимся к завершению задач 10 горутинами.🔹
make(chan struct{}, 3)
: создает семафор, который позволяет одновременно работать только трем горутинам.☑️ Если нам нужен более чистый способ, мы могли бы создать тип Semaphore, который обрабатывает все действия, связанные с семафором.
☑️ Использование кастомного типа Semaphore упрощает управление доступом к ресурсам в наших функциях.
☑️ Также существует реализация семафора в пакете
golang.org/x/sync/semaphore
. Он позволяет горутине использовать более одного слота, что полезно в сценариях, где задачи различаются по потреблению ресурсов.👍23
tgoop.com/go_interview_lib/331
Create:
Last Update:
Last Update:
💬 Как использовать буферизированные каналы в качестве семафоров для ограничения выполнения горутин?
Когда нам нужно управлять тем, сколько горутин могут одновременно получить доступ к ресурсу, использование семафора является надежным подходом.
Мы можем создать семафор с использованием буферизированного канала, где размер канала определяет, сколько горутин могут работать одновременно.
Вот что происходит:
🔹 Горутина отправляет значение в канал, занимая один слот.
🔹 После выполнения своей задачи она удаляет значение, тем самым освобождая этот слот для другой горутины.
В примере:
🔹
🔹
☑️ Если нам нужен более чистый способ, мы могли бы создать тип Semaphore, который обрабатывает все действия, связанные с семафором.
☑️ Использование кастомного типа Semaphore упрощает управление доступом к ресурсам в наших функциях.
☑️ Также существует реализация семафора в пакете
Когда нам нужно управлять тем, сколько горутин могут одновременно получить доступ к ресурсу, использование семафора является надежным подходом.
Мы можем создать семафор с использованием буферизированного канала, где размер канала определяет, сколько горутин могут работать одновременно.
Вот что происходит:
🔹 Горутина отправляет значение в канал, занимая один слот.
🔹 После выполнения своей задачи она удаляет значение, тем самым освобождая этот слот для другой горутины.
В примере:
🔹
wg.Add(10)
: готовимся к завершению задач 10 горутинами.🔹
make(chan struct{}, 3)
: создает семафор, который позволяет одновременно работать только трем горутинам.☑️ Если нам нужен более чистый способ, мы могли бы создать тип Semaphore, который обрабатывает все действия, связанные с семафором.
☑️ Использование кастомного типа Semaphore упрощает управление доступом к ресурсам в наших функциях.
☑️ Также существует реализация семафора в пакете
golang.org/x/sync/semaphore
. Он позволяет горутине использовать более одного слота, что полезно в сценариях, где задачи различаются по потреблению ресурсов.BY Библиотека Go для собеса | вопросы с собеседований




Share with your friend now:
tgoop.com/go_interview_lib/331