feat(cli): add concurrent execution of search and update to improve performance
This commit is contained in:
parent
0306ad36ef
commit
afaf7707aa
4 changed files with 85 additions and 22 deletions
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue