semaphore

Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
Hadi
2025-09-28 23:00:49 +02:00
parent 4e9234c8f1
commit 9698b5b862

View File

@@ -10,7 +10,7 @@ import (
"github.com/gin-gonic/gin"
)
func searchWorker(s *server.Server, cache *map[string]*search.Result, searchQueue chan string) {
func searchWorker(s *server.Server, cache *map[string]*search.Result, searchQueue chan string, limiter chan struct{}) {
for id := range searchQueue {
s.Mu.RLock()
r, exists := (*cache)[id]
@@ -20,7 +20,9 @@ func searchWorker(s *server.Server, cache *map[string]*search.Result, searchQueu
continue
}
limiter <- struct{}{}
search.Search(s, r.Query, r, s.Mu)
<-limiter
}
}
@@ -142,6 +144,7 @@ func Init(s *server.Server) {
cache := make(map[string]*search.Result)
searchQueue := make(chan string, 100)
searchLimiter := make(chan struct{}, 1)
go func() {
for {
@@ -150,7 +153,7 @@ func Init(s *server.Server) {
}
}()
go searchWorker(s, &cache, searchQueue)
go searchWorker(s, &cache, searchQueue, searchLimiter)
routes(s, &cache, searchQueue)
}