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

LINUX 精通 8

day24 20240909 晚19:35 - 20: 47

课程链接地址

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

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

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

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

main-> 协程 resume, 反过来 yield

代码加了:hook操作

​ _t代表类型

c 复制代码
// 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等!!!
相关推荐
薄荷故人_11 分钟前
从零开始的C++之旅——红黑树封装map_set
c++
悲伤小伞39 分钟前
C++_数据结构_详解二叉搜索树
c语言·数据结构·c++·笔记·算法
LaoWaiHang43 分钟前
MFC小知识:CEdit::GetSel函数的使用
mfc
arriettyandray1 小时前
MFC/C++学习系列之简单记录1——错误解决与Dialog移植
mfc
m0_675988232 小时前
Leetcode3218. 切蛋糕的最小总开销 I
c++·算法·leetcode·职场和发展
code04号5 小时前
C++练习:图论的两种遍历方式
开发语言·c++·图论
煤泥做不到的!6 小时前
挑战一个月基本掌握C++(第十一天)进阶文件,异常处理,动态内存
开发语言·c++
F-2H6 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
axxy20007 小时前
leetcode之hot100---24两两交换链表中的节点(C++)
c++·leetcode·链表
若亦_Royi8 小时前
C++ 的大括号的用法合集
开发语言·c++