能看到这篇文章一定是特殊的缘分,请务必珍惜,请详细看看吧,哈哈。
图片
不止上图,最近 Go就业训练营 中不少小伙伴说,面试中碰到了好几次让手撕协程池的公司。
解题思路:
通过以上的解题思路,我们可以实现一个基本的协程池。
在实际应用中,可能还需要考虑一些其他的因素,如任务优先级、任务超时处理等。根据具体的需求,可以对协程池进行进一步的扩展和优化。
说完了解题思路,再给大家一个可参考,可运行的示例代码:
示例代码:
package main
import (
"fmt"
"sync"
)
type Job struct {
ID int
}
type Worker struct {
ID int
JobChannel chan Job
Quit chan bool
}
type Pool struct {
WorkerNum int
JobChannel chan Job
WorkerQueue chan chan Job
Quit chan bool
wg sync.WaitGroup
}
// NewWorker 创建一个新的工作者
func NewWorker(id int, workerQueue chan chan Job) Worker {
return Worker{
ID: id,
JobChannel: make(chan Job),
Quit: make(chan bool),
}
}
// Start 启动工作者
func (w Worker) Start(workerQueue chan chan Job) {
go func() {
for {
workerQueue