首页后端开发GOgo的数据类型-其他数据类型-channel(二)

go的数据类型-其他数据类型-channel(二)

时间2023-04-26 12:27:02发布访客分类GO浏览1543
导读:Channel的使用示例以下是一个使用Channel的示例程序,该程序创建了两个Goroutine,并使用Channel在它们之间进行通信和同步。package main import ( "fmt" "time" func w...

Channel的使用示例

以下是一个使用Channel的示例程序,该程序创建了两个Goroutine,并使用Channel在它们之间进行通信和同步。

package main

import (
	"fmt"
	"time"
)

func worker(id int, jobs -chan int, results chan- int) {

	for j := range jobs {

		fmt.Printf("worker %d started job %d\n", id, j)
		time.Sleep(time.Second)
		fmt.Printf("worker %d finished job %d\n", id, j)
		results - j * 2
	}

}


func main() {
    
	jobs := make(chan int, 100)
	results := make(chan int, 100)

	for w := 1;
     w = 3;
 w++ {

		go worker(w, jobs, results)
	}
    

	for j := 1;
     j = 9;
 j++ {

		jobs - j
	}
    
	close(jobs)

	for a := 1;
     a = 9;
 a++ {

		-results
	}

}
    

在这个示例程序中,我们定义了一个名为worker的函数,它模拟了一个工作任务。这个函数接收一个jobs的单向Channel用于接收工作任务,以及一个results的单向Channel用于发送工作结果。当函数接收到一个工作任务时,它会等待一秒钟,然后将工作结果发送到results的Channel中。

main函数中,我们创建了两个Channel:一个jobs的Channel用于发送工作任务,一个results的Channel用于接收工作结果。然后,我们启动了三个Goroutine,并将它们分别分配给worker函数。接下来,我们向jobs的Channel中发送了9个工作任务,并关闭了这个Channel。最后,我们从results的Channel中接收了9个工作结果。

在这个示例程序中,我们使用Channel实现了工作任务的分配和工作结果的收集。通过使用Channel,我们可以轻松地实现Goroutine之间的通信和同步,从而使程序变得简单和高效。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

go

若转载请注明出处: go的数据类型-其他数据类型-channel(二)
本文地址: https://pptw.com/jishu/9227.html
python高级线程编程-线程间通信(一) go的数据类型-其他数据类型-channel(一)

游客 回复需填写必要信息