동시 고루틴 실행 제한
처리할 URL 목록이 있고 실행되는 동시 고루틴 수를 제한하려는 시나리오를 고려해보세요. . 예를 들어 URL이 30개라면 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이 배포되면 작업자URLChan이 닫히고 현재 URL이 완료되면 작업자가 종료됩니다. 이 메커니즘은 동시에 실행되는 고루틴의 수를 효과적으로 제한합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3