Golang小知识 - go关键字创建并发执行

{app.params.name}}{app.params.name}}{app.params.name}}

Golang小知识 - go关键字创建并发执行

go如何在实际代码中实现并发执行

下面示例如下

package main

import (
	"fmt"
	"time"
)

func worker(id int, jobs <-chan int) {
	fmt.Println("worker", len(jobs))

	for j := range jobs {
		fmt.Println("wodker", id, "started job", j)
	}
}

func main() {
	const jobsNum = 5
	jobs := make(chan int, jobsNum)

	for w := 1; w <= 3; w++ {
		go worker(w, jobs)
	}

	for j := 1; j <= jobsNum; j++ {
		jobs <- j
	}

	close(jobs)

	time.Sleep(time.Second * 4)
}

这里可以看出来

go worker(w, jobs)

这里的代码创建了三个并行的操作

我运行下看看运行结果,运行三次的结果如下

第一次运行结果

$ go run main.go
worker 5
wodker 1 started job 1
wodker 1 started job 2
wodker 1 started job 3
wodker 1 started job 4
wodker 1 started job 5
worker 0
worker 0

第二次运行结果

$ go run main.go
worker 5
worker 5
wodker 2 started job 2
wodker 2 started job 3
wodker 2 started job 4
wodker 2 started job 5
wodker 1 started job 1
worker 5

第三次运行结果

$ go run main.go
worker 5
wodker 3 started job 1
wodker 3 started job 2
worker 5
wodker 1 started job 4
wodker 1 started job 5
wodker 3 started job 3
worker 5

从运行的结果可以看出每次运行的结果都不一样

我们可以理解为启动的三个并行函数,都获得了 chan

for...range 执行的时候先从chan中获取数据的先执行 这个先后顺序是根据计算机内部调用的来决定的。

 

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/143



版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/143