From 5cc1fc597f13c2f7c781f45b5f37169958752b04 Mon Sep 17 00:00:00 2001 From: demo Date: Tue, 26 May 2026 18:19:34 -0400 Subject: feat: implement maxConcurrency using a buffered channel 'sema' --- classic.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'classic.go') diff --git a/classic.go b/classic.go index ef138e2..bb22b0b 100644 --- a/classic.go +++ b/classic.go @@ -23,6 +23,7 @@ func classic(startURL url.URL, maxConcurrency, maxURLs int) { ctx, cancel := context.WithCancel(context.Background()) var wg sync.WaitGroup + sema := make(chan struct{}, maxConcurrency) loop: for ; numPendingSends > 0; numPendingSends-- { @@ -42,7 +43,9 @@ loop: select { case <-ctx.Done(): return - case worklist <- getBatch(u): + case sema <- struct{}{}: + defer func() { <-sema }() + worklist <- getBatch(u) } }) } -- cgit v1.2.3