golang select chan实现任务优先级编排!!!

w570955342 · · 1719 次点击
我只是觉得上诉代码复杂了。job1优先job2,把job2放在第一层select的default里面就行了,相同时间点,job1有就会先执行job1。 而不是这种花里胡哨的写法,在job1,job2随机取了,如果是job2又去看是否有job1。 ``` // 第一个select如果先收到job1,则直接执行job1 select { case <-ctx.Done(): log.Println("收到结束信号,退出worker函数!") return case job1 := <-ch1: // 模拟job1需要1秒执行结束 log.Println(job1) time.Sleep(time.Second) case job2 := <-ch2: ```
#5
更多评论
我有用过类似的情景,但我是这样写的。 ``` for { // 优先管理连接 select { // add conn case ic := <-bNode.addConnChan: bNode.Connections[ic.GetUuid()] = ic bNode.clientSize++ // conn leave case key := <-bNode.delConnChan: delete(bNode.Connections, key) bNode.clientSize-- default: select { case pkg := <-bNode.onMessage: if pkg == nil { // stop Serve _ = bNode.Destroy() return } bNode.allMessages = append(bNode.allMessages, pkg) bNode.broadcast(pkg) default: time.Sleep(time.Millisecond * 50) } } } ```
#1
buscoop
纸上得来终觉浅,绝知此事要躬行!
这个不全,谁知道你写得什么
#2