在上述代码中,我们定义了一个表示协程池的 Pool 结构体,其中 work 是一个无缓冲通道类型(该类型需要实现 Woker 接口),用于表示需要协程池执行的任务,wg 是一个 sync.WaitGroup 类型,用于控制协程池所有协程的执行和退出。
该 Pool 结构体定义了三个方法,分别是初始化协程池的 New 方法,分配任务给协程池的 Run 方法,以及关闭协程池的 Shutdown 方法,我们重点关注 New 方法。该方法接收一个 maxGoroutines 参数表示协程池中协程的最大数量,在初始化 Pool 的 work 属性时,没有指定缓冲值,表明其无缓冲通道类型:
p := Pool{ work: make(chan Worker), }
我们会让每个协程执行对应的任务方法(如果协程池有分配任务的话,否则会阻塞):
p.wg.Add(maxGoroutines) for i := 0; i < maxGoroutines; i++ { gofunc() { for w := range p.work { w.Task() } p.wg.Done() }() }
注:我们可以通过协程池的 Run 方法将任务分配给协程池。
上述代码会异步执行,所以不影响 New 方法返回实例化后的 Pool 对象。
接下来,我们编写一段调用该协程池执行任务的入口程序 work.go:
package main
import ( "log" "sync" "test/worker" "time" )
var langs = []string{ "Golang", "PHP", "JavaScript", "Python", "Java", }
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。
Sublime Text
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。