Golang 中的平行處理:利用並發來提高效能
考慮提供的程式碼,其中展示了 Goroutines 的並行處理。然而,它提出了關於並發執行的潛力以及實現並行性的最佳方法的問題。
dowork的同時執行
dowork並行執行的前提是不保證。雖然 goroutine 提供了輕量級的並發機制,但作業系統排程器決定了實際的執行順序。根據 Go 1.5 的發行說明,GOMAXPROCS 通常與可用內核保持一致。
建議方法:死鎖預防與同時控制
關於維護主函數的執行、 fmt.Scanln 可能不可靠,尤其是在生產環境中。相反,考慮實現一個sync.WaitGroup來確保所有goroutine在退出之前完成。此外,為了增強並發控制並確保並行任務的適當資源利用,建議為每個 goroutine 使用獨立的 dowork 工作執行緒。
用於平行函數執行的實用函數
為了簡化並行函數執行,可以利用現有的實用函數,如下所示:
import "sync"
// Parallelize parallelizes function calls
func Parallelize(functions ...func()) {
var waitGroup sync.WaitGroup
waitGroup.Add(len(functions))
defer waitGroup.Wait()
for _, function := range functions {
go func(f func()) {
defer waitGroup.Done()
f()
}(function)
}
}
將此函數套用到程式碼片段:
func1 := func() { f(0) }
func2 := func() { f(1) }
func3 := func() { f(2) }
Parallelize(func1, func2, func3)
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3