19 06 2023
在Go语言中,可以使用goroutine和channel来实现线程池。下面是一个简单的示例代码: ```go package main import ( "fmt" "sync" ) type Job struct { id int } func worker(id int, jobs <-chan Job, results chan<- int) { for job := range jobs { fmt.Printf("Worker %d started job %d\n", id, job.id) // 这里可以执行具体的任务逻辑 results <- job.id // 将结果发送到results通道中 } } func main() { const numWorkers = 5 const numJobs = 10 jobs := make(chan Job, numJobs) results := make(chan int, numJobs) var wg sync.WaitGroup wg.Add(numWorkers) // 启动多个worker for i := 1; i <= numWorkers; i++ { go func(workerID int) { worker(workerID, jobs, results) wg.Done() }(i) } // 提供一些工作给worker for i := 1; i <= numJobs; i++ { jobs <- Job{id: i} } close(jobs) // 等待所有工作完成 wg.Wait() // 关闭结果通道 close(results) // 输出结果 for result := range results { fmt.Printf("Job %d completed\n", result) } } ``` 这段代码中,我们首先定义了一个`Job`结构体来表示具体的任务。然后,在`worker`函数中,我们从`jobs`通道中接收任务,然后执行具体的任务逻辑,并将结果发送到`results`通道中。 在`main`函数中,我们创建了两个通道:`jobs`用于存放任务,`results`用于存放结果。然后,我们使用`sync.WaitGroup`来等待所有的worker完成任务。 接下来,我们启动了多个worker,并将它们绑定到`jobs`和`results`通道上。然后,我们向`jobs`通道中发送一些任务。最后,我们等待所有的worker完成任务,并关闭`results`通道。最后,我们从`results`通道中读取结果并输出。 这样就实现了一个简单的线程池。每个worker都会从`jobs`通道中接收任务,并通过`results`通道将结果返回。
延伸阅读
    numpy.AxisError: axis 2 is out of bounds for array of dimension 2
    什么是黑色素瘤?
    哪个加密货币会暴涨
    音响中的低音炮是用来增强哪种声音的?
    假如你穿越到了春秋战国时期,你会加入那个学派,加入后你准备如何发挥你的优势帮助你的学派,1000字