Go语言并发编程:高效处理二叉树遍历
本文介绍如何利用Go语言的多线程并发特性,优化二叉树遍历等计算密集型任务的执行效率。我们将以一个示例,演示如何将单线程代码改造成多线程并发代码。
Go语言强大的并发机制依赖于goroutine和channel。goroutine是轻量级线程,使用go关键字即可启动。 因此,将单线程代码改写成多线程代码最直接的方法是在需要并行执行的代码块前添加go关键字。
以下示例展示了如何使用goroutine并行遍历二叉树:
立即学习“go语言免费学习笔记(深入)”;
package mainimport ( "fmt" "sync")type Node struct { val int left *Node right *Node}func traverse(n *Node, wg *sync.WaitGroup, ch chan int) { defer wg.Done() if n != nil { ch <- n.val wg.Add(2) // 为左右子树分别添加计数 go traverse(n.left, wg, ch) go traverse(n.right, wg, ch) }}func main() { root := &Node{val: 1, left: &Node{val: 2}, right: &Node{val: 3}} ch := make(chan int) var wg sync.WaitGroup wg.Add(1) // 为根节点添加计数 go traverse(root, &wg, ch) go func() { wg.Wait() close(ch) }() for val := range ch { fmt.Println(val) }}
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。
如若转载请注明出处:http://www.down96.com/tutorials/511.html