GO_INTERVIEW_LIB Telegram 334
💬 Как использовать буферизированные каналы в качестве семафоров для ограничения выполнения горутин?

Когда нам нужно управлять тем, сколько горутин могут одновременно получить доступ к ресурсу, использование семафора является надежным подходом.

Мы можем создать семафор с использованием буферизированного канала, где размер канала определяет, сколько горутин могут работать одновременно.

Вот что происходит:

🔹 Горутина отправляет значение в канал, занимая один слот.
🔹 После выполнения своей задачи она удаляет значение, тем самым освобождая этот слот для другой горутины.

В примере:

🔹 wg.Add(10): готовимся к завершению задач 10 горутинами.
🔹 make(chan struct{}, 3): создает семафор, который позволяет одновременно работать только трем горутинам.

☑️ Если нам нужен более чистый способ, мы могли бы создать тип Semaphore, который обрабатывает все действия, связанные с семафором.
☑️ Использование кастомного типа Semaphore упрощает управление доступом к ресурсам в наших функциях.
☑️ Также существует реализация семафора в пакете golang.org/x/sync/semaphore. Он позволяет горутине использовать более одного слота, что полезно в сценариях, где задачи различаются по потреблению ресурсов.
👍23



tgoop.com/go_interview_lib/334
Create:
Last Update:

💬 Как использовать буферизированные каналы в качестве семафоров для ограничения выполнения горутин?

Когда нам нужно управлять тем, сколько горутин могут одновременно получить доступ к ресурсу, использование семафора является надежным подходом.

Мы можем создать семафор с использованием буферизированного канала, где размер канала определяет, сколько горутин могут работать одновременно.

Вот что происходит:

🔹 Горутина отправляет значение в канал, занимая один слот.
🔹 После выполнения своей задачи она удаляет значение, тем самым освобождая этот слот для другой горутины.

В примере:

🔹 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/334

View MORE
Open in Telegram


Telegram News

Date: |

Clear fire bomb molotov November 18 Dylan Hollingsworth yau ma tei How to build a private or public channel on Telegram? But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." Content is editable within two days of publishing
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American