目录

  • Linux高性能网络:协程系列01-前言
  • Linux高性能网络:协程系列02-协程的起源
  • Linux高性能网络:协程系列03-协程的案例
  • Linux高性能网络:协程系列04-协程实现之工作原理
  • Linux高性能网络:协程系列05-协程实现之原语操作
  • Linux高性能网络:协程系列06-协程实现之切换
  • Linux高性能网络:协程系列07-协程实现之定义
  • Linux高性能网络:协程系列08-协程实现之调度器
  • Linux高性能网络:协程系列09-协程性能测试
  • [Linux高性能网络:协程系列10 待续]()

8.协程实现之调度器

  • 8.0 前言
  • 8.1生产者消费者模式
  • 8.2 多状态下运行

8.0 前言

  问题:协程如何被调度?

  调度器的实现,有两种方案,一种是生产者消费者模式,另一种多状态运行。

8.1 生产者消费者模式

  逻辑代码如下:

while (1) {//遍历睡眠集合,将满足条件的加入到readynty_coroutine *expired = NULL;while ((expired = sleep_tree_expired(sched)) != ) {TAILQ_ADD(&sched->ready, expired);}//遍历等待集合,将满足添加的加入到readynty_coroutine *wait = NULL;int nready = epoll_wait(sched->epfd, events, EVENT_MAX, 1);for (i = 0;i < nready;i ++) {wait = wait_tree_search(events[i].data.fd);TAILQ_ADD(&sched->ready, wait);}// 使用resume回复ready的协程运行权while (!TAILQ_EMPTY(&sched->ready)) {nty_coroutine *ready = TAILQ_POP(sched->ready);resume(ready);}}

8.2 多状态下运行

  逻辑代码如下:

while (1) {//遍历睡眠集合,使用resume恢复expired的协程运行权nty_coroutine *expired = NULL;while ((expired = sleep_tree_expired(sched)) != ) {resume(expired);}//遍历等待集合,使用resume恢复wait的协程运行权nty_coroutine *wait = NULL;int nready = epoll_wait(sched->epfd, events, EVENT_MAX, 1);for (i = 0;i < nready;i ++) {wait = wait_tree_search(events[i].data.fd);resume(wait);}// 使用resume恢复ready的协程运行权while (!TAILQ_EMPTY(sched->ready)) {nty_coroutine *ready = TAILQ_POP(sched->ready);resume(ready);}}

更多分享

email: 1989wangbojing@163.com
email: lizhiyong4360@gmail.com
email: 592407834@qq.com
协程技术交流群:829348971

转载于:https://blog.51cto.com/240630/2306855

Linux高性能网络:协程系列08-协程实现之调度器相关推荐

  1. linux的进程/线程/协程系列5:协程的发展复兴与实现现状

    协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...

  2. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 6 多重旋轉圓, 螺旋正方形

    Goal: 藉由有趣的「海龜動畫繪圖」學會基礎的 Python 程式設計 本篇介紹基礎的 Python 海龜動畫繪圖, 確實可以只以簡單的指令畫出極為複雜有趣或美麗的圖案: 多重旋轉之圓或多邊形, 多 ...

  3. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 6.1 內嵌正多邊形 類似禪繞圖

    Goal: 藉由有趣的「海龜動畫繪圖」學會基礎的 Python 程式設計 本篇介紹基礎的 Python 海龜動畫繪圖, 確實可以只以簡單的指令畫出極為複雜有趣或美麗的圖案: 內嵌正多邊形之圖案, 禪繞 ...

  4. Go调度器系列(3)图解调度原理

    如果你已经阅读了前2篇文章:<调度起源>和<宏观看调度器>,你对G.P.M肯定已经不再陌生,我们这篇文章就介绍Go调度器的基本原理,本文总结了12个主要的场景,覆盖了以下内容: ...

  5. (6)Linux进程调度-实时调度器

    目录 背景 1. 概述 2. 数据结构 3. 流程分析 3.1 运行时统计数据 3.2 组调度 3.3 带宽控制 3.4 调度器函数分析 3.4.1 pick_next_task_rt 3.4.2 e ...

  6. Linux进程调度 - 实时调度器 LoyenWang

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  7. Go调度器系列(4)源码阅读与探索

    各位朋友,这次想跟大家分享一下Go调度器源码阅读相关的知识和经验,网络上已经有很多剖析源码的好文章,所以这篇文章不是又一篇源码剖析文章,注重的不是源码分析分享,而是带给大家一些学习经验,希望大家能更好 ...

  8. 用c语言实现对n个进程采用“短进程优先”算法的进程调度_为什么Linux CFS调度器没有带来惊艳的碾压效果?...

    文章转自公众号"人人都是极客" 但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核 ...

  9. 为什么Linux CFS调度器没有带来惊艳的碾压效果? | CSDN博文精选

    任何领域,革命性的碾压式推陈出新并不是没有,但是概率极低,人们普遍的狂妄在于,总是认为自己所置身的环境正在发生着某种碾压式的变革,但其实,最终大概率不过是一场平庸. 作者 | dog250 责编 | ...

  10. 能感知功耗的Linux调度器(EAS)

    译者简介 白嘉庆,西邮陈莉君教授门下研一学生.曾在华为西安研究所任C++开发一职,目前兴趣是学习Linux内核网络安全相关内容. 本文的翻译宋宝华老师指导审阅. 序 2014年Linux内核峰会(Li ...

最新文章

  1. 工行服务器维护时间,工行服务器安全链接
  2. 与ISP合作需要了解哪些?
  3. Java修饰符:public,protected,private,不加修饰符的区别
  4. 反转链表 IIPython解法
  5. table表格 html 1128
  6. gramer法则matlab,线性代数-matlab实验报告.doc
  7. AcWing 888. 求组合数 IV(高精度求组合数问题)
  8. python中使用动量交易策略
  9. Delphi 2007 TIDHttp HTTPS 出现Error connecting with SSL
  10. 网关支付、银联代扣通道、快捷支付、银行卡支付等网上常见支付方式接口说明
  11. 独立访客数UV、访问量PV和IP数的区别
  12. 以教务管理的成绩单查询为例,SSM整合开发过程详解(spring、springmvc、mybatis)
  13. JS瀑布流插件 -- salvattore
  14. 简述linux的系统组成,【简答题】Linux操作系统有哪几个部分组成?请简述每个组成部分的作用。...
  15. java类的使用方法小结_JavaPoet的使用指南小结
  16. uva10827-Maximum sum on a torus(矩阵最大和的变形)
  17. 华为Nova7+1=荣耀50?我看未必
  18. tplink查看上网记录_tp-link路由器如何查看连接人数 tp-link路由器查看连接人数方法【步骤】...
  19. Android 绘制圆形进度条
  20. 笔记本写代码 屏幕尺寸_为什么笔记本电脑的屏幕尺寸如此奇怪?

热门文章

  1. c3p0连接mysql异常
  2. Promise读取多个文件
  3. for of 和 for in 在数组和对象中的区别
  4. Cartographor定位-shell脚本:不停拉起死掉的程序和脚本
  5. 推荐一个博客,或许给技术流的自己一些启示
  6. 华为eNSP模拟器上实现FTP服务
  7. warning delete ·· (prettier/prettier)
  8. QCwindows server 2003部署
  9. Codeforces 814C - An impassioned circulation of affection
  10. python OpenGL 安装