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