Skynet:消息队列

Skynet的全局队列和服务队列机制确保高效的消息处理。每个服务拥有自己的服务队列,当达到最大容量时,队列会自动扩容。工作线程从全局队列获取服务队列进行消息处理。添加消息时,若服务队列未在全局队列中,会将其加入。队列使用循环结构,并在消息数量超过警戒阈值时发出负载提示。
摘要由CSDN通过智能技术生成

在Skynet中将消息队列分为:全局队列和服务队列,每个服务都有一个相应的服务队列用于存放于该服务相关的消息,而每个服务队列都会被全局队列所引用,每个工作线程通过从全局队列中取出相应的服务队列进行消息处理。相应的结构体为:

//每个服务队列的结构体
struct message_queue {
    struct spinlock lock;            //锁
    uint32_t handle;                //服务handle,用于定位服务,高8位为节点的编号
    int cap;                        //服务队列中消息队列的容量
    int head;                        //服务队列中消息队列的头
    int tail;                        //服务队列中消息队列的尾
    int release;                    //标记是否释放
    int in_global;                    //标记该服务是否在全局队列中
    int overload;                    //记录服务队列中消息超过阈值时的数量
    int overload_threshold;            //服务队列中消息的上限值,超过将会翻倍
    struct skynet_message *queue;    //消息队列
    struct message_queue *next;        //指向下一个服务
};

//全局队列的结构体
struct global_queue {
    struct message_queue *head;        //全局队列头
    struct message_queue *tail;        //全局队列尾
    struct spinlock lock;            //锁
};
全局队列的初始化:文件skynet_start.c中的s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值