您的位置:首页 >ubuntu golang并发处理怎样实现
发布于2026-05-02 阅读(0)
扫一扫,手机访问
说到Go语言的并发处理,核心就靠两样东西:Goroutine和Channel。Goroutine可以理解为超级轻量的“线程”,能让你的程序同时处理多件事;而Channel则是这些Goroutine之间安全传递数据的“管道”。下面,咱们就通过一个具体的例子,来看看在Ubuntu系统上怎么玩转这套机制。

首先,你得确保系统里已经装好了Go语言环境。如果还没装,直接去Go官网(https://golang.org/dl/)下载对应Ubuntu的安装包,按照指引完成安装就行。
环境准备好之后,新建一个叫main.go的文件,把下面的代码贴进去:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second)
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait()
fmt.Println("All workers done")
}
这段代码里,我们定义了一个worker函数。它干的事儿很简单:接收一个工号(ID)和一个任务计数器(sync.WaitGroup指针),然后模拟一个需要耗时1秒的任务(用time.Sleep实现)。任务开始和结束时,都会打印一条状态信息。
重点在main函数里。我们创建了一个sync.WaitGroup实例,它的作用就像个“任务完成等待器”。接着,一个循环启动了5个Goroutine(你可以把它们想象成5个同时开工的工人)。每启动一个,就用wg.Add(1)告诉计数器:“有个新任务开始了”。而在每个worker函数结束时,defer wg.Done()这句会确保计数器减1,表示“我这个任务完成了”。
最后,wg.Wait()这行代码是关键,它会一直等待,直到计数器清零——也就是所有Goroutine都干完活了,程序才会继续往下走,打印出“All workers done”。
代码写好了,怎么运行呢?打开终端,进入存放main.go文件的目录,输入下面这条命令:
go run main.go
很快,你就能在终端里看到类似这样的输出:
Worker 1 starting
Worker 2 starting
Worker 3 starting
Worker 4 starting
Worker 5 starting
Worker 1 done
Worker 2 done
Worker 3 done
Worker 4 done
Worker 5 done
All workers done
注意看输出顺序:所有“Worker X starting”几乎是同时打印的,这说明5个Goroutine确实是一起开始执行的。至于谁先“done”,那就看系统调度了。最终,“All workers done”的出现,清晰地证明了我们成功实现了并发执行与同步等待。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9