美文网首页
多级队列

多级队列

作者: 我帅的不忍直视 | 来源:发表于2020-03-11 15:23 被阅读0次

skynet采用二级队列的方式调度任务。

struct global_queue {

struct message_queue *head;

struct message_queue *tail;

struct spinlock lock;

};

global_queue为第一级,可见队列内容是第二级队列message_queue ,队列操作使用自旋锁,避免频繁的线程上下文切换。

每次调度message_queue ,会根据message_queue 长度一次性的pop多个任务来执行

else if (i==0 && weight >= 0) {

n = skynet_mq_length(q);

n >>= weight;

}

weight为制定的线程权重,前四个是负值。

如果message_queue 为空,则标记in_global=0,不再放入global_queue中,否则重新入队。

如果global_queue为空(实际应用中不会的),message_queue 也不会重新入队,而是直接再次调度,不用再入队出队。

如果global_queue没有任何message_queue 可调度,则

pthread_mutex_lock

pthread_cond_wait

pthread_mutex_unlock

等待唤醒。

加锁

(pthread_cond_wait前要先加锁)

pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活

(pthread_cond_wait被激活后会再自动加锁)

解锁

相关文章

  • 多级队列

    skynet采用二级队列的方式调度任务。 struct global_queue { struct message...

  • 10 架构模式

    多级缓存, 提高查找效率 队列, 先进先出栈, 先进后出

  • 多级队列调度算法

    多级队列调度算法将系统中不同类型或性质的就绪进程固定分配到不同的就绪队列中,每个就绪队列可以采用自己的调度算法;而...

  • cpu调度-多级反馈队列

    本篇主要谈谈多久反馈队列,Multi-Level Feed-back Queue(MLFQ)。MLFQ试图解决的问...

  • 多级反馈队列调度算法

    在采用 FB 的系统中,设置了多个不同优先级的就绪队列,并赋予各个队列大小不同的时间片,使优先级越高的时间片越小。...

  • zookeeper选举原理

    一、选举流程 通过看了源码,了解到,zookeeper为了提升并发性能,使用了多级队列架构,提高了服务的并发;大概...

  • 处理机调度(实验)

    参考先来先服务算法,尝试实现其他四种调度算法:短作业优先、高响应比、时间片轮转、多级反馈队列。要求实现短作业优先、...

  • 你的系统是怎样支持高并发的?-多级缓存架构

    ​ 目录 ① 多级缓存使用场景 ② 多级缓存读写逻辑 ③缓存预热 ④总结 1 多级缓存使用场景 多级缓存适合用在对...

  • 7、处理器调度2(操作系统笔记)

    五、多级反馈队列调度算法 是UNIX的一个分支BSD5.3版所采用的调度算法 是一个综合调度算法(折中权衡) 设置...

  • XQMultistageTableView - iOS多级列表

    XQMultistageTableView - 多级列表 可以自定义子节点的多级菜单 1. 多级菜单 2. 多选/...

网友评论

      本文标题:多级队列

      本文链接:https://www.haomeiwen.com/subject/qnscjhtx.html