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中文網其他相關文章!