feat(cli): add concurrent execution of search and update to improve performance

This commit is contained in:
Patryk Hegenberg 2025-01-20 22:10:19 +01:00
parent 0306ad36ef
commit afaf7707aa
4 changed files with 85 additions and 22 deletions

View file

@ -5,6 +5,7 @@ import (
"log"
"runtime"
"strings"
"sync"
pm "system_setup_tool/packagemanager"
@ -57,9 +58,7 @@ var searchCmd = &cobra.Command{
return
}
for _, manager := range managers {
searchAndDisplayResults(manager, packageName)
}
searchConcurrently(managers, packageName)
},
}
@ -79,3 +78,34 @@ func searchAndDisplayResults(manager pm.PackageManager, packageName string) {
displayResults(results, manager.Name())
fmt.Println()
}
func searchConcurrently(managers []pm.PackageManager, packageName string) {
var wg sync.WaitGroup
results := make(chan struct {
manager pm.PackageManager
results []string
}, len(managers))
for _, manager := range managers {
wg.Add(1)
go func(m pm.PackageManager) {
defer wg.Done()
searchResults := m.SearchPackage(packageName)
results <- struct {
manager pm.PackageManager
results []string
}{m, searchResults}
}(manager)
}
go func() {
wg.Wait()
close(results)
}()
for result := range results {
fmt.Printf("Results from %s:\n", result.manager.Name())
displayResults(result.results, result.manager.Name())
fmt.Println()
}
}