商城首页欢迎来到中国正版软件门户

您的位置:首页 >ubuntu golang并发处理怎样实现

ubuntu golang并发处理怎样实现

  发布于2026-05-02 阅读(0)

扫一扫,手机访问

在Ubuntu上实现Go语言并发处理

说到Go语言的并发处理,核心就靠两样东西:Goroutine和Channel。Goroutine可以理解为超级轻量的“线程”,能让你的程序同时处理多件事;而Channel则是这些Goroutine之间安全传递数据的“管道”。下面,咱们就通过一个具体的例子,来看看在Ubuntu系统上怎么玩转这套机制。

ubuntu golang并发处理怎样实现

首先,你得确保系统里已经装好了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”的出现,清晰地证明了我们成功实现了并发执行与同步等待。

本文转载于:https://www.yisu.com/ask/34718592.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注