当前位置: 首页 > news >正文

个人建站提供软件下载微信营销和网站建设

个人建站提供软件下载,微信营销和网站建设,旅游类网站设计,网站建设论文百度云盘大概流程就是job -> JobQueue调度器循环获取JobQueue &#xff0c;获取到的job &#xff0c;再去异步获取等待可用的 worker&#xff0c;取出 chan Job,将job 写入改worker的 chan Jobworker 处理任务&#xff0c;先处理 case job : <-w.JobChannel: 处理完成后再将 chan…
  • 大概流程就是job -> JobQueue
  • 调度器循环获取JobQueue ,获取到的job ,再去异步获取等待可用的 worker,取出 chan Job,将job 写入改worker的 chan Job
  • worker 处理任务,先处理 case job := <-w.JobChannel: 处理完成后再将 chan Job 写入到worker 里面,等待调度去取调用
package mainimport ("log""os""strconv""sync""time"
)var (MaxWorker intMaxQueue  intJobQueue  chan Job
)func init() {var err errorMaxWorker, err = strconv.Atoi(os.Getenv("MAX_WORKERS"))if err != nil {MaxWorker = 5 // 默认值}MaxQueue, err = strconv.Atoi(os.Getenv("MAX_QUEUE"))if err != nil {MaxQueue = 10 // 默认值}JobQueue = make(chan Job, MaxQueue)
}type Payload struct {// Payload的属性
}func (p *Payload) UploadToS3() error {// 模拟上传操作log.Println("Uploading to S3")return nil
}type Job struct {Payload Payload
}type Worker struct {WorkerPool chan chan JobJobChannel chan Jobquit       chan bool
}func NewWorker(workerPool chan chan Job) Worker {return Worker{WorkerPool: workerPool,JobChannel: make(chan Job),quit:       make(chan bool)}
}func (w Worker) Start() {go func() {for {w.WorkerPool <- w.JobChannelselect {case job := <-w.JobChannel:if err := job.Payload.UploadToS3(); err != nil {log.Printf("Error uploading to S3: %s", err)}case <-w.quit:return}}}()
}func (w *Worker) Stop() {go func() {w.quit <- true // 通知工作线程停止}()
}type Dispatcher struct {WorkerPool chan chan JobmaxWorkers intworkers    []Worker  // 新增:用于跟踪所有工作线程quit       chan bool // 用于停止dispatch循环
}func NewDispatcher(maxWorkers int) *Dispatcher {return &Dispatcher{WorkerPool: make(chan chan Job, maxWorkers),maxWorkers: maxWorkers,workers:    make([]Worker, 0, maxWorkers),}
}func (d *Dispatcher) Runs() {for i := 0; i < d.maxWorkers; i++ {worker := NewWorker(d.WorkerPool)d.workers = append(d.workers, worker) // 跟踪新创建的工作线程worker.Start()}go d.dispatch()
}func (d *Dispatcher) dispatch() {for {select {// 从JobQueue中获取一个jobcase job := <-JobQueue:go func(job Job) {// 尝试获取一个可用的worker job channel,阻塞直到有可用的workerjobChannel := <-d.WorkerPool// 分发job到worker job channel中jobChannel <- job}(job)case <-d.quit:// 退出return}}
}func (d *Dispatcher) StopAllWorkers() {var wg sync.WaitGroupfor _, worker := range d.workers {wg.Add(1)go func(w Worker) {w.Stop() // 停止工作线程wg.Done()}(worker)}wg.Wait() // 等待所有工作线程安全退出
}func (d *Dispatcher) Stop() {d.quit <- trued.StopAllWorkers()
}func main() {dispatcher := NewDispatcher(MaxWorker)dispatcher.Runs()// 模拟作业提交for i := 0; i < 20; i++ {payload := Payload{ /* ... */ }job := Job{Payload: payload}JobQueue <- job}// 等待一段时间,以便可以看到工作的完成time.Sleep(10 * time.Second)
}
http://www.yayakq.cn/news/946081/

相关文章:

  • 青岛建个网站多少钱广东网站建设科技
  • 网站icp备案号查询2 网站内部链接优化
  • 吴镇宇做的电影教学网站网络推广费用预算表
  • 狠狠做网站 百度一下云南 房地产网站建设
  • 网站带做收录排名网站项目建设目标
  • 网站建设书本如何做招聘网站统计表
  • 女性时尚资讯+淘宝客模式系列网站源码工程公司经营范围大全
  • 廊坊百度网站排名自适应网站内容做多大尺寸
  • 网站放自己服务器备案哪个网站做h5好用
  • 网站兼容9微信小程序制作精灵
  • 申请个人网站需要多少钱网站建设中html5模板
  • 网站关键词重要吗电商网站的建设背景
  • 临沂住房和城乡建设厅网站在家开个代加工厂
  • 微信小程序 做网站比较好的公司网站
  • 网站设计例子顺德手机网站设计咨询
  • 太原市住房和城乡建设部网站怎么增加网站的收录量
  • 做百度推广送网站定制礼品的网站有哪些
  • 福田网站设计公司企业需要做网站吗
  • 自助建站上建的网站免费吗wordpress新闻轮播制作
  • 郑州建立一个网站需要哪些网页联系我们怎么做
  • 做网上商城网站设计网页qq怎么登录
  • 网站所有分类中 点击箭头不出现下拉菜单wordpress重复链接
  • 河南网站建设多少钱ajax登陆wordpress
  • 徐州建设局网站安全证中国建设银行网站公积金查询
  • 网站平台系统设计公司深圳官方网站建设
  • 郑州网站zhi zuo织梦 wordpress
  • 第二章营销型网站建设测验网页编辑软件 破解版
  • 北京定制网站公司网站建设实训心得体会2000字
  • 海外网站服务器网址做一个自己的app要多少钱
  • 网站备案照片网站宣传的方法主要有