«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как ограничить одновременное выполнение горутины в Go?

Как ограничить одновременное выполнение горутины в Go?

Опубликовано 10 ноября 2024 г.
Просматривать:482

How to Limit Concurrent Goroutine Execution in Go?

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

Рассмотрим сценарий, в котором у вас есть список URL-адресов для обработки и вы хотите ограничить количество одновременно выполняемых горутинов . Например, если у вас 30 URL-адресов, вам может потребоваться только 10 горутин, работающих параллельно.

Приведенный код пытается использовать буферизованный канал размера параллельный, чтобы ограничить количество запущенных горутинов. . Однако этот подход, похоже, не блокируется после обработки всех URL-адресов. Более эффективный способ достичь этого ограничения параллелизма — создать определенное количество рабочих горутин и передать им URL-адреса через выделенный канал.

Вот улучшенная версия кода:

parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()
urls := flag.Args()

// Create a channel to hold URLs that workers will consume
workerURLChan := make(chan string)

// Start a goroutine to feed URLs to the workers
go func() {
    for _, u := range flag.Args() {
        workerURLChan 

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3