- 博客(10)
- 收藏
- 关注
原创 mcpmcp
mcp server 作为ai与外部工具的连接层,代替人类访问并操作外部工具,mcp server本质上就是一段Nodejs或者是python程序,ai大模型通过操作系统的stdio标准输入输出通道或者是sse协议,以json的息格式调用某一个mcp server,mcp server接收到消息后,通过自己的代码功能或用api请求,访问外部工具来完成任务。MCP Client: 一个组件,负责维持与 MCP server的通信,并从 MCP server获取上下文信息,供 MCP host调用。
2025-12-29 10:41:01
609
原创 kafka
消息队列的消息为了防止进程崩溃后丢失一般不放内存,而是放磁盘。消息从消息队列的磁盘发送到消费者的发送过程1.程序发起系统调用read,将磁盘数据从设备拷贝到内核空间的缓冲区2.再拷贝到用户空间3.程序在发起系统调用write,将数据从用户空间拷贝到socket缓冲区4.socket缓冲区拷贝到网卡2次系统调用,4次用户空间和内核空间的切换,4次数据拷贝。
2025-09-28 17:01:23
403
原创 move和forward
move用于移动语义,从而实现资源转移forward用于完美转发,使目标函数接收的实参与被传递给转发函数的实参保持一致(值类别)
2025-04-23 17:39:41
203
原创 mutex原理
锁是一个独占的资源,需要内存标记,所有线程都能访问,假设lock标记为1代表持有锁;标记为0代表没有持有锁。只允许持有锁的线程访问临界区,其他未持有锁的线程必须等待这个线程释放锁,在尝试获取锁才能访问临界区。切换线程陷入内核等待:任务较重时高效,充分利用系统资源操作系统可调度其他任务。谁持有锁谁释放:假设owner,记录持有锁的线程id。在用户层自旋等待,任务较轻时高效,避免了线程切换。futex_wake 遍历等待队列,唤起等待线程。先判断是否当前线程 ,原子操作设置lock为0。
2025-04-23 17:18:44
199
原创 类的静态成员变量
静态成员变量的内存分配是在类外通过定义来完成的。类的定义可能会被多个源文件包含,如果在类的定义中对静态成员变量进行初始化,就会导致在多个源文件中重复定义,从而在链接时产生重复定义的错误。发现staticVarOne 和 staticVarTwo 是静态成员变量,它们在类外定义时被分配了内存,并且其地址在编译和链接阶段就已经确定,所以会被记录到符号表中。notstaticVar 是非静态成员变量,它的内存是在创建 Test 类的对象时才分配的,其地址在编译和链接阶段是不确定的,因此不会被记录到符号表中。
2025-04-23 16:45:30
611
原创 c++单例类
当一个线程获取到锁并创建了单例对象后,其他线程在等待锁释放后进入临界区,如果不进行第二次检查,就会再次创建单例对象,违背了单例模式的原则。编译器可能对这个过程优化,三步的顺序可能会重排导致对象不会正确初始化,导致未定义的行为。如何解决这个问题呢?类加载的时候不会将自己实例化,它在第一次调用GetInstance方法的时候实例化,这种技术又称为延迟加载技术,即在需要的时候才加载实例。饿汉式单例模式在类加载时就会创建单例实例,因为单例对象是作为类的静态成员变量存在的,静态成员变量在程序启动时就会被初始化。
2025-04-23 16:43:30
540
原创 左值和右值
左值:可以在等号左边,可以取地址,具名。如:变量名,前置自增,解引用,返回左值引用的函数调动右值:只能在等号右边,不能取地址,不具名。如:1.纯右值:字面量,后置自增,返回非引用类型的函数调用,算术表达式。2将亡值:用来触发移动构造或移动赋值后进行资源转移,然后调用析构函数。
2025-04-23 11:35:24
231
原创 虚函数表和虚函数表指针
类对象构造的时候,把类的虚函数表地址赋值给vptr,当没有构造函数时,编译器会生成默认的构造函数。当继承时,如果派生类没有重写基类的虚函数,会拷贝基类的虚函数表,重写了就用把虚函数表里面的内容改成自己的重写后的函数地址。当创建对象时,先调用基类的构造,vptr是基类的虚函数表地址,在调用派生类的构造,vptr覆盖为派生类的徐函数表地址。· 虚函数表是虚函数地址的数组,带有virtual的类会生成一个虚函数表,每一个虚函数类创建的对象存储了虚函数表指针。· 虚函数表指针的创建时机?虚函数表的创建时机;
2025-04-22 23:52:55
310
原创 malloc free 和 new delete的区别
new是在free sotre 上分配内存;malloc分配的是虚拟内存,虚拟内存通过缺页中断寻找物理内存的映射关系,小于128k在堆上,大于128k在mmap映射区。· new(1.operator new 2.申请足够空间 3.调用构造函数初始化成员变量)malloc free是c语言中的库函数。· new返回的是对象类型的指针;malloc返回的是void*后进行类型转换。· new自动计算所分配内存的大小;· delete 需要对象类型的指针,free是void*类型的指针。
2025-04-22 23:05:18
197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅