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

w570955342 · 2020-12-11 23:32:39 · 1917 次点击

我只是觉得上诉代码复杂了。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