
Golang 中的平行處理:利用並發來提高效能
考慮提供的程式碼,其中展示了 Goroutine 的並行處理。然而,它提出了關於並發執行的潛力以及實現並行性的最佳方法的問題。
dowork 的並發執行
dowork 並行執行的前提是不保證。雖然 goroutine 提供了輕量級的並發機制,但作業系統排程器決定了實際的執行順序。根據 Go 1.5 的發行說明,GOMAXPROCS 通常與可用內核保持一致。
建議方法:死鎖預防和同時控制
關於維護 main 函數的執行、 fmt.Scanln 可能不可靠,尤其是在生產環境中。相反,考慮實現一個sync.WaitGroup來確保所有goroutine在退出之前完成。此外,為了增強並發控制並確保並行任務的適當資源利用,建議為每個 goroutine 使用獨立的 dowork Worker 通道。
用於平行函數執行的實用函數
為了簡化並行函數執行,可以利用現有的實用函數,如下所示:
<code class="go">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)
}
}</code>將此函數應用於程式碼片段:
<code class="go">func1 := func() { f(0) }
func2 := func() { f(1) }
func3 := func() { f(2) }
Parallelize(func1, func2, func3)</code>以上是如何在 Golang 中實現真正的並行:Goroutines、死鎖和通道?的詳細內容。更多資訊請關注PHP中文網其他相關文章!