跨平台
协程的好处:
跨体系架构
无需线程上下文切换的开销
无需原子操作锁定及同步的开销。代码实现
package main import ( "fmt" "time" ) type Task struct { f func()error //一个task中有具体的业务,业务名叫f } func NewTask(arg_f func()error) *Task{ t:=Task{ f:arg_f, } return &t } func(t *Task)Execute(){ t.f() } type Pool struct { EntryChannel chan *Task JobChannel chan *Task //协成池中的最大worker数量 worker_num int } func NewPool(cap int) *Pool{ //创建一个Pool p:=Pool{ EntryChannel:make(chan *Task), JobChannel:make(chan *Task), worker_num:cap, } return &p } //创建一个work去工作 func(p *Pool)worker(worker_ID int){ //永久的jobchannel取任务 for task:=range p.JobChannel{ task.Execute() fmt.Println("work ID",worker_ID,"执行完了一个任务") } } func(p *Pool)run(){ //根据work_num来创建worker工作 //从entrychananel去工作 for i:=0;i<p.worker_num;i++{ //每个worker都应该是一个goroutioe go p.worker(i) } for task:=range p.EntryChannel{ p.JobChannel<-task } } func main() { //创建一些任务 t := NewTask(func() error { fmt.Println(time.Now()) return nil }) //创建一个Pool p := NewPool(4) task_num:=0 go func() { for { p.EntryChannel <- t task_num+=1 fmt.Println("当前一共执行了",task_num,"个任务") } }() p.run() }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算