自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

工地上的犟驴

学习笔记

  • 博客(21)
  • 收藏
  • 关注

原创 红黑树部分实现

红黑树部分实现,从笔记中复制过来的。之前做了一半 写到删除实现总感觉不优雅又没有合适的思路改好看

2024-10-02 08:04:13 318 1

原创 协程——缝合篇

把前面的协程笔记合并整理

2024-10-02 04:41:45 1196

原创 协程的额外补充

无栈协程

2024-09-12 17:45:22 602

原创 brpc网络模型

服务端对网络请求的处理大致可以分为三个阶段:dispatcher:接收到pollin事件ProcessEvent:处理事件,主要是读取请求数据,做内置协议的解析,为后续调用协议的处理逻辑做准备ProcessInputMessage:处理请求,调用usercode,CallMethod。

2024-09-12 02:25:29 1193

原创 rpc服务添加以及服务器启动

老规矩先看demo调用搭建一个rpc server,就是创建一个Server对象,设置好参数,添加Service,然后启动。Server可以包含多个Service,而Service又可以包含多个method,具体的某次请求就是针对某个method的。server的构造函数感觉没什么需要关注的点defined||defined。

2024-09-12 02:24:26 1390

原创 ResourcePool

前面跟bthread流程的时候多个地方涉及资源池都没有细看,本来这部分应该放到bthread前面的,但因为对框架不熟悉,只能从提供的demo开始。ResourcePool是一个全局的单例模式类,而每个线程(thread_local)拥有一个单例的LocalPool,大概思想是线程通过LocalPool请求对象,LocalPool每一次从ResourcePool中请求一个大的块(就叫做Block吧),ResourcePool中每次内存不足时向系统请求一个Block。

2024-09-12 02:17:55 388

原创 调度逻辑整理补充

补充,之前思路有误

2024-09-12 02:17:07 432

原创 bthread任务调度

brpc的线程模型中调度主体执行单位就是TaskGroup (前面学习云风coroutine的时候也是将schedule扩展成TaskGroup),也叫worker。主要成员:TaskGroup对象可以看成系统线程的私有对象。每个TaskGroup都维护自己单独的栈指针,_main_task和 _main_tid。每个TaskGroup中都有一个特殊的TaskMeta,这是在TaskGroup初始化时赋值每个TaskGroup都有两个TaskMeta队列,rq和remote_rq。

2024-09-12 02:16:14 625

原创 bthread任务创建

前面说了_pending_signal一般都是偶数,只有调用ParkingLot中stop成员函数才会让这个值变奇数,调用stop函数的地方就只在TaskControl的stop_and_join(),stop_and_join()只在bthread_stop_world()中调用。ready_to_run()的操作相对简洁。last_pl_state是TaskGroup的ParkingLot::State对象成员,TaskGroup初始化,_last_pl_state是无参构造val默认0。

2024-09-12 02:14:12 448

原创 bthread代码跟读

bthread创建过程

2024-09-12 02:03:11 1050

原创 bthread结构整理

bthread结构

2024-09-12 01:53:22 610

原创 coroutine学习

小改

2024-09-12 01:51:02 268

原创 云风coroutine代码跟读

coroutine跟读

2024-09-12 01:46:22 1093

原创 ucontext.h程序上下文理解

context

2024-09-12 01:42:01 460

原创 认识协程1

一个函数的堆栈帧用 [E|R]SP,[E|R]BP ,这两个寄存器划定范围,[E|R]SP始终指向栈顶的位置称为栈指针寄存器,[E|R]BP指向堆栈帧的一个固定位置,[E|R]BP 又被称为帧指针,一般函数中的局部变量靠 [E|R]BP 加上偏移量寻找。总结来说,有栈协程和无栈协程的主要区别在于栈空间的处理方式。有栈协程就是模拟出一个协程的栈空间,当需要进行执行流的的上下文切换时,主线程只需要交换栈空间和恢复协程的一些相关寄存器状态就可以实现一个用户态的线程切换,没有了线程切换到内核态的开销。

2024-09-12 01:15:31 988

原创 从0理解bthread

自己语雀笔记,有空再整理

2024-07-06 21:20:38 293

原创 redis学习

redis源码学习(四)文章目录redis源码学习(四)前言继续读源码,内存管理部分zmalloc1.zmalloc.h2.zmalloc.c前言继续读源码,内存管理部分zmalloc1.zmalloc.h#ifndef _ZMALLOC_H#define _ZMALLOC_Hvoid *zmalloc(size_t size);void *zrealloc(void *ptr, size_t size);void zfree(void *ptr);char *zstrdup(c

2023-09-25 12:40:25 65

原创 redis学习

/定义sds类型,本质为char*字符串long len;//当前字符长度long free;//剩余长度char buf[];//可变长字符数组,大小随结构体申请分配,存储形式['h','e','l','l','o','\0']//sdshdr这个结构体本身用来存储数据对象信息,使用的时候一般拿到sds的地址(即buf),相关函数的操作都是字符串地址减去两个long得到结构体的地址然后操作len和free#else#endif#endif。

2023-09-25 02:20:35 116

原创 redis学习

redis源码学习(二)redis-cli解读目录redis源码学习(二)前言继续redis-cli.c细读,昨天看到parseOptions一、repl前言继续redis-cli.c细读,昨天看到parseOptions提示:以下是本篇文章正文内容,下面案例可供参考一、repl firstarg = parseOptions(argc,argv); argc -= firstarg; argv += firstarg; //parseoptions返回值等于arg

2022-05-20 13:17:51 153

原创 【redis学习】

系列文章目录例如:redis源码学习(一)提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、redis是什么?二、学习路线1.Makefile文件2.redis-cli前言提示:这里可以添加本文要记录的大概内容:一、redis是什么?redis可以看做是以socket做进程间通信的map,并封装多个接口及持久化机制。二、学习路线redis在3.0版本正式支持集群部署。在6.0版本加入多线程。这里选择从低版本开始按模块学习1.Makefile

2022-05-18 13:15:00 165

原创 初识红黑树

红黑树

2019-07-27 21:39:31 267

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除