Linux高性能网络:协程系列08-协程实现之调度器
目录
- 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-协程实现之调度器相关推荐
- linux的进程/线程/协程系列5:协程的发展复兴与实现现状
协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...
- 從turtle海龜動畫 學習 Python - 高中彈性課程系列 6 多重旋轉圓, 螺旋正方形
Goal: 藉由有趣的「海龜動畫繪圖」學會基礎的 Python 程式設計 本篇介紹基礎的 Python 海龜動畫繪圖, 確實可以只以簡單的指令畫出極為複雜有趣或美麗的圖案: 多重旋轉之圓或多邊形, 多 ...
- 從turtle海龜動畫 學習 Python - 高中彈性課程系列 6.1 內嵌正多邊形 類似禪繞圖
Goal: 藉由有趣的「海龜動畫繪圖」學會基礎的 Python 程式設計 本篇介紹基礎的 Python 海龜動畫繪圖, 確實可以只以簡單的指令畫出極為複雜有趣或美麗的圖案: 內嵌正多邊形之圖案, 禪繞 ...
- Go调度器系列(3)图解调度原理
如果你已经阅读了前2篇文章:<调度起源>和<宏观看调度器>,你对G.P.M肯定已经不再陌生,我们这篇文章就介绍Go调度器的基本原理,本文总结了12个主要的场景,覆盖了以下内容: ...
- (6)Linux进程调度-实时调度器
目录 背景 1. 概述 2. 数据结构 3. 流程分析 3.1 运行时统计数据 3.2 组调度 3.3 带宽控制 3.4 调度器函数分析 3.4.1 pick_next_task_rt 3.4.2 e ...
- Linux进程调度 - 实时调度器 LoyenWang
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- Go调度器系列(4)源码阅读与探索
各位朋友,这次想跟大家分享一下Go调度器源码阅读相关的知识和经验,网络上已经有很多剖析源码的好文章,所以这篇文章不是又一篇源码剖析文章,注重的不是源码分析分享,而是带给大家一些学习经验,希望大家能更好 ...
- 用c语言实现对n个进程采用“短进程优先”算法的进程调度_为什么Linux CFS调度器没有带来惊艳的碾压效果?...
文章转自公众号"人人都是极客" 但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核 ...
- 为什么Linux CFS调度器没有带来惊艳的碾压效果? | CSDN博文精选
任何领域,革命性的碾压式推陈出新并不是没有,但是概率极低,人们普遍的狂妄在于,总是认为自己所置身的环境正在发生着某种碾压式的变革,但其实,最终大概率不过是一场平庸. 作者 | dog250 责编 | ...
- 能感知功耗的Linux调度器(EAS)
译者简介 白嘉庆,西邮陈莉君教授门下研一学生.曾在华为西安研究所任C++开发一职,目前兴趣是学习Linux内核网络安全相关内容. 本文的翻译宋宝华老师指导审阅. 序 2014年Linux内核峰会(Li ...
最新文章
- 工行服务器维护时间,工行服务器安全链接
- 与ISP合作需要了解哪些?
- Java修饰符:public,protected,private,不加修饰符的区别
- 反转链表 IIPython解法
- table表格 html 1128
- gramer法则matlab,线性代数-matlab实验报告.doc
- AcWing 888. 求组合数 IV(高精度求组合数问题)
- python中使用动量交易策略
- Delphi 2007 TIDHttp HTTPS 出现Error connecting with SSL
- 网关支付、银联代扣通道、快捷支付、银行卡支付等网上常见支付方式接口说明
- 独立访客数UV、访问量PV和IP数的区别
- 以教务管理的成绩单查询为例,SSM整合开发过程详解(spring、springmvc、mybatis)
- JS瀑布流插件 -- salvattore
- 简述linux的系统组成,【简答题】Linux操作系统有哪几个部分组成?请简述每个组成部分的作用。...
- java类的使用方法小结_JavaPoet的使用指南小结
- uva10827-Maximum sum on a torus(矩阵最大和的变形)
- 华为Nova7+1=荣耀50?我看未必
- tplink查看上网记录_tp-link路由器如何查看连接人数 tp-link路由器查看连接人数方法【步骤】...
- Android 绘制圆形进度条
- 笔记本写代码 屏幕尺寸_为什么笔记本电脑的屏幕尺寸如此奇怪?
热门文章
- c3p0连接mysql异常
- Promise读取多个文件
- for of 和 for in 在数组和对象中的区别
- Cartographor定位-shell脚本:不停拉起死掉的程序和脚本
- 推荐一个博客,或许给技术流的自己一些启示
- 华为eNSP模拟器上实现FTP服务
- warning delete ·· (prettier/prettier)
- QCwindows server 2003部署
- Codeforces 814C - An impassioned circulation of affection
- python OpenGL 安装