2.3.2 协程调度器实现与性能测试

news2024/11/17 15:26:12

LINUX 精通 8

day24 20240909 晚19:35 - 20: 47

课程链接地址

老师画图用的是excalidraw 可以在线 本地!

Excalidraw:开源实用的白板画图工具(在线/本地安装)-CSDN博客

2.3.2 协程调度器实现与性能测试

复习了上一次的switch 函数协程间跳法——ucontext

main-> 协程 resume, 反过来 yield

代码加了:hook操作

​ _t代表类型

// hook
// 类型
typedef ssize_t (*read_t)(int fd, void *buf, size_t count);
read_t read_f = NULL;

typedef ssize_t (*write_t)(int fd, const void *buf, size_t count);
write_t write_f = NULL;

// read write
ssize_t read(int fd, void *buf, size_t count) {

	ssize_t ret = read_f(fd, buf, count);
	printf("read: %s\n", (char *)buf);
	return ret;
}


ssize_t write(int fd, const void *buf, size_t count) {

	printf("write: %s\n", (const char *)buf);

	return write_f(fd, buf, count);
}


// 功能
void init_hook(void) {

	if (!read_f) {
		read_f = dlsym(RTLD_NEXT, "read");
	}

	
	if (!write_f) {
		write_f = dlsym(RTLD_NEXT, "read");
	}

}

这部分ucontext_backup.c基本上都跳了 了解就行吧!!!

hook钩子:Hook 指的是一首歌中不断重复,且易于记忆的段落,一般出现在开头和副歌的位置。

不调用系统 的fd,用hook调自己的api

请添加图片描述

请添加图片描述

hook作用:

gpt

在编程中,“hook”通常指的是一种机制,通过它你可以插入或修改程序的执行流程。在协程的上下文中,hook有几个重要的作用和应用,主要集中在以下几个方面:

  1. 调试和性能监控
    • 调试:使用hook可以帮助你跟踪协程的执行过程。这在复杂的协程调度和管理中尤其有用。你可以在协程的关键点插入hook,以便记录协程的状态、执行时间等信息。
    • 性能监控:通过hook,你可以监控协程的执行性能,包括协程的创建、切换、销毁等操作的开销。这有助于识别性能瓶颈和优化代码。
  2. 调度和控制
    • 协程调度:在协程调度器中,hook可以用于插入自定义的调度逻辑。例如,你可以在协程的挂起和恢复点插入hook,以实现特定的调度策略或管理协程的优先级。
    • 中断和恢复:在协程的上下文切换时,hook可以用来保存和恢复协程的状态,确保协程的执行可以从中断点正确恢复。
  3. 异步编程和事件驱动
    • 事件处理:在事件驱动的协程系统中,hook可以用于插入自定义的事件处理逻辑。比如,你可以在协程等待某个事件时插入hook,以便处理事件的发生或其他相关操作。
  4. 协程的扩展和定制
    • 扩展功能:通过hook,你可以为协程系统添加额外的功能。例如,在协程的生命周期管理中添加日志记录、性能分析等功能。
    • 定制行为:hook允许你自定义协程的行为,例如修改默认的调度策略、异常处理机制等。

协程如何定义

协程的实现与原理.pdf!!! ready , wait, sleep 他们之间用scheduler切换

wait, sleep可以用红黑树!!!

请添加图片描述

汇编跳转方法

见X86-64寄存器和栈帧.pdf

请添加图片描述

setjmp/longjmp 跨平台最好,Windowslinux都行 但是比较老麻烦

ucontext代码最容易,跨平台不行

汇编:跨平台有限制,cpu也有限制,指令都不一样

写函数尽量参数不超过6个

这节课基本上跳了,没仔细听,花了1h 快速过了一遍!!!

回顾上节课开头目的:

性能测试:用100w 百万并发

多线程 read sleep wait需要考虑加锁, cpu亲性

多进程不用考虑

ntyco实现 没看

ntyco 是一个用于管理协程调度和异步操作的 Python 库。它主要提供了一些工具来帮助你处理协程的生命周期、异常处理和调度策略。具体功能包括:

  1. 协程调度:提供灵活的协程调度机制,使得你可以更好地控制协程的执行顺序和时间。
  2. 异常处理:集成了协程异常处理的功能,可以帮助捕获和处理协程中的异常。
  3. 生命周期管理:对协程的生命周期进行管理,确保协程的正确启动、运行和终止。

如何写到简历

  1. 只是个网络框架是一个基础组件ntyco
  2. webserver, kv存储用了ntyco
  3. 用到产品场景里 图床, redis等!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)

跟着该视频学习,记录笔记:【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day3 内容梳理:…

使用ChatGPT生成爆款小红书文案,有手就行!

小红书,作为当下热门的社交电商平台,以其独特的社区氛围、精准的用户画像和高粘性的互动模式,吸引了大量年轻用户,尤其是女性用户。平台上的内容风格多样,涵盖了美妆、时尚、生活方式等多个领域。 本文将介绍小红书平台…

为何家用无线路由器不能实现PROFINET通信?

家用无线路由器和工业通信设备到底有什么不同?工控人加入PLC工业自动化精英社群 首先,在技术上,两者存在明显的差异。 家用无线路由器主要是为了提供互联网接入和家庭设备间的连接,而PROFINET则是专为工业自动化设计的通信协议。就…

1分钟教你用AI制作美女热舞视频,收益可观,操作简单(附工具及教程资料)

美女跳舞,听着是不是就觉得会很哇塞? 不管是男的女的、老的少的都喜欢看,而且一般美女跳舞的账号涨粉都很快,势头都贼猛。 今天就给大家分享一个很热门的小副业——AI美女跳舞。 更多实操和AI绘画工具,可以扫描下方&…

通过SSH服务远程操作Linux(ubuntu)主机

首先SSH是什么?SSH(Secure SHell)是Linux、Unix、Mac及其他网络设备最常用的远程CLI管理协议,SSH使用秘钥对数据进行加密,保证了远程管理数据的安全性。Secure Shell (SSH) 是一种网络协议,允许用户通过加密…

OpenCV-轮廓特征

文章目录 一、简介1.意义2.类别 二、代码实现1.数据预处理2.计算周长3.绘制外接圆轮廓4.绘制外接矩阵 三、总结 一、简介 1.意义 在OpenCV中,轮廓检测后得到的轮廓不仅是一系列点的集合,还可以进一步分析以提取有用的特征。这些特征包括但不限于轮廓的…

纷享销客CRM+契约锁:“好应用+电子签” 融合领先实践

9月6日,主题为“智享未来 领创CRM新纪元”的2024纷享销客伙伴大会湖北站圆满结束,此次盛会吸引了来自不同行业的精英代表、技术专家,共同探讨CRM领域的最新趋势、创新实践与未来机遇。纷享销客战略伙伴契约锁受邀参加本次大会,为现…

一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention

一区霜冰算法双向深度学习模型注意力机制!RIME-BiTCN-BiGRU-Attention 目录 一区霜冰算法双向深度学习模型注意力机制!RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法…

NLP-新词挖掘

一、背景 网络领域的新词发现(挖掘)是一个非常重要的nlp课题。在处理文本对象时,非常关键的问题在于“切词”这个环节,几乎所有的后续结果都依赖第一步的切词。因此切词的准确性在很大程度上影响着后续的处理,切词结果…

树莓派通过串口驱动SU-03T语音模块

树莓派通过串口驱动SU-03T语音模块 文章目录 树莓派通过串口驱动SU-03T语音模块一、SU-03T语音模块的配置和烧录1.1 PIN引脚配置:1.2 设置唤醒词:1.3 设置控制详情:1.4 下载SDK并烧录到语音模块: 二、测试语音模块三、树莓派通过串…

在这12种场景下会使Spring事务失效--注意防范

在某些业务场景下,如果一个请求中,需要同事写入多张表的数据,但为了保证操作的原子性(要么同事插入数据成功,要么同事插入失败),例如,当我们创建用户的时候,往往会给用户…

图的广度优先遍历与深度优先遍历(C语言)

这是结果 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define _CRT_SECURE_NO_WARNINGS// 定义边表结点结构 typedef struct EdgeNode {int adjvex; // 邻接顶点域&#xff0c;存储该边所指向的顶点struct EdgeNode* next; // 指向下一条…

Oracle Linux 8.10安装Oracle19c(19.3.0)完整教程

安装前请仔细将文档通读一遍&#xff0c;安装过程中根据安装命令仔细核对&#xff0c;特别留意一些字体加粗或标红的字样&#xff0c;遇到问题请及时咨询公司 1、基础环境 1.1、操作系统 cat /etc/redhat-release 1.2、主机名 医院默认分配的主机名可能跟其他主机会有重复&a…

【阿里云】10分钟在网站上增加一个AI助手

文章目录 方案预览1. 创建大模型问答应用1.1 创建应用1.2 获取调用 API 所需的凭证 2. 搭建示例网站2.1 创建应用2.2 访问网站 3. 为网站增加 AI 助手3.1 增加 AI 助手相关代码3.2 验证网站上的 AI 助手 4. 为 AI 助手增加私有知识4.1 配置知识库 总结应用于生产环境前端代码服…

mysql使用笔记

1、下载mysql,本教程适用于免安装版。 https://dev.mysql.com/downloads/mysql/ 当前最新版本是8.0.27,如果想安装其他版本,选择Achives. 下载后减压到要放置的目录中。 E:\mysql-5.7.35-winx64 这是我的路径,在根目录下建立一个my.ini 文件,用来放置配置信息,保存的时候…

猫咪浮毛有这么严重?你不知道的浮毛清理好物——宠物空气净化器

家人们谁懂啊&#xff0c;男朋友整天和我家猫争宠&#xff0c;最近还上升到了有猫没他的地步。猫咪刚开始接回来的时候压根不掉毛&#xff0c;他们相处的特别好&#xff0c;呆在一起玩的时间比我还多。可是这样温馨的相处没持续多久就变了&#xff0c;之前不掉毛都是猫咪的假象…

MIST:用于组织病理学亚型预测的多实例选择性Transformer|文献速递--基于深度学习的医学影像病灶分割

Title 题目 MIST: Multi-instance selective transformer for histopathological subtype prediction MIST&#xff1a;用于组织病理学亚型预测的多实例选择性Transformer 01 文献速递介绍 组织病理学亚型预测在癌症疾病的诊断和治疗中具有重要的临床意义。组织病理学亚型…

反序列化漏洞练习1

根据代码可以看出来sis类只是接收了参数cmd&#xff0c;下边是通过get获得cmd的值&#xff0c;所以可以在序列化过程中直接为cmd赋值。 根据源码编写序列化代码 <?php class sis{public $cmdsystem("whoami");?>;public function __wakeup(){eval($this-&g…

记录深度学习量化操作

0. 简介 深度学习中做量化提升运行速度是最常用的方法&#xff0c;尤其是大模型这类非常吃GPU显存的方法。一般是高精度浮点数表示的网络权值以及激活值用低精度&#xff08;例如8比特定点&#xff09;来近似表示达到模型轻量化&#xff0c;加速深度学习模型推理&#xff0c;目…

选择网站服务器有哪几种类型?

许多用户往往对服务器托管、服务器租用、独享带宽、VPS租用、虚拟主机、云服务器等概念没有很知道&#xff0c;记不清怎样挑选IDC业务&#xff0c;有的一味的认为质量&#xff0c;挑选了费用较高的套餐&#xff0c;但是却浪费资源&#xff0c;没有必要&#xff0c;也有一些用户…