自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 高性能服务器项目阅读:Thread类的设计

但这样写有一个问题,就是当主线程创建子线程后,有可能在子线程返回其tid之前就访问tid()了,这个就会导致结果不正确。

2025-05-17 15:49:01 142

原创 epoll机制

epoll是一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现,,而网络数据包中包含了ip和端口的信息,内核可以通过端口号找到对应的socket。通知机制,就是当事件发生的时候,则主动通知。通知机制的反面,就是轮询机制。当文件描述符关联的内核读缓冲区可读,则触发可读事件。当文件描述符关联的内核写缓冲区可写,则触发可写事件。操作系统如何知道网络数据对应于哪个socket?,然后对其的进行读写操作。,而不是直接操作进程。

2025-05-12 20:07:33 886

原创 std::bind的用法

是不可行的,这是因为成员函数指针与普通函数指针不同,它隐式依赖。在C++中,直接传递成员函数指针(

2025-05-11 10:56:22 172

原创 C++ 多线程 wait,notifty,mutex 的使用

在 C++ 多线程编程中,线程间的协调是一个经常需要考虑的问题。我们经常需要一个线程等待某个条件满足(例如,等待任务队列非空,或等待某个计算完成),而另一个线程则负责在条件满足时通知等待的线程。所以你可以想象到这样一个场景:每位家庭成员尝试获取抱枕并发言,对于拿到抱枕却又支支吾吾的,他应该立即放下抱枕让给别人。一个很直白的思路就是,对于忙等待(占着cpu又无所事事)的进程,应该让它阻塞。例子:考虑经典的消费者-生产者模型。

2025-04-04 21:14:14 638

原创 C++ 中public,protected,private三种访问权限关键字

参考资料:深入理解C++中public、protected及private用法菜鸟教程

2025-04-03 17:15:04 722

原创 linux中select, poll, epoll三种模型的比较

其实流程和select差不多,主要区别在于将bitmap换成了pollfd结构体,这样就不存在文件描述符个数的限制。总结来说,select函数主要按顺序干了以下几件事情。

2025-04-03 16:30:43 304

原创 聪明的你:源代码文件到底是怎样在机器上运行的

这很容易理解,在链接器将两个目标文件链接之前,main.o并不知道其所调用的func1的具体位置,只有在链接之后才能计算。目标文件未链接(如 .o 文件),外部函数调用的地址会暂时填充为 0x0,而 callq 的相对偏移量会基于下一条指令的地址计算。而在链接阶段,调用外部函数的地址是通过 符号解析(Symbol Resolution)和重定位(Relocation) 确定的。这里,你能看见熟悉的保存上文基址,为局部变量分配栈空间等操作。然而此时的你依然是懵懂的,目标文件到底是个啥?指令对应的二进制码为。

2025-04-02 15:53:05 929

原创 浅析linux中的select函数

0: 当监视的相应的文件描述符集中满足条件时,比如说读文件描述符集中有数据到来时,内核(I/O)根据状态修改文件描述符集。

2025-04-02 11:03:53 365

原创 自己动手写shared_ptr

RAII是什么:RAII(Resource Acquisition Is Initialization)是由c++之父Bjarne Stroustrup提出的,中文翻译为:资源获取即初始化。但是显而易见的是,这并未解决重复释放的问题。由此想到我们给对象加一个计数机制,记录指向这个对象的指针数量。内存泄露:手动分配的内存在程序结束时未得到释放。基于此,你很容易先写出这样的一个包装类;实例,需要它们共享引用计数,故使用。注意:对于指向同一个对象的不同的。的基础上改造一下,修改的是。(可能释放资源的两处)

2025-03-31 19:28:32 779

原创 图解TCP传输过程

考虑这样的情形:客户端向服务器端发送的请求报文由于网络等原因滞留,未能发送到服务器端,此时连接请求报文失效,客户端会再次向服务器端发送请求报文,之后与服务器端建立连接,当连接释放后,由于网络通畅了,第一次客户端发送的请求报文又突然到达了服务器端,这条请求报文本该失效了,但此时服务器端误认为客户端又发送了一次连接请求,两次握手建立好连接,此时客户端忽略服务器端发来的确认,也不发送数据,造成不必要的错误和网络资源的浪费。TCP报文是由TCP头部和数据两部分组成的。怎样理解序列号(seq)和确认号(ack)

2025-03-31 16:30:03 265

原创 聪明的你:操作系统中的分页机制

好的,聪明的你很快就又发现了,这样的寻址方式虽然解决了连续性问题,但是:以32位系统为例,内存大小为4GB,对应4KB大小的页有1M(2^20) 个,那么页基址也就有1M个,那你的页表项也就有1M个。但问题来了0x20001根本就不能是一个合法的页基址,因为页基址是不连续的,0x20000是一个合法的页基址,其下一个页基址在0x21000(因为页大小为4KB,页基址也会相差这么多)好的,聪明的你就发现了,我不直接寻址页基址,而是把线性地址的高20位看作是一个偏移,偏移总该是连续的吧?但是你似乎忘了,你的。

2025-03-30 17:32:27 850

原创 GDT如何编写?

我们已经知道,在x86 16位实模式下,CPU通过段基址<<4+段偏移实现寻址;(段描述符,Segment Descriptor)共64位大小,描述了对应段的基址,大小,权限等信息;(Data Segment Descriptor)(定义数据段的属性和权限)组成。(Code Segment Descriptor)(定义代码段的属性和权限),(Null Descriptor)(用于防止 CPU 错误访问),其次,分别定义代码段和数据段描述符(见标签。分别用于指向代码段和数据段描述符。最后定义两个段选择子(

2025-02-25 20:23:34 398

原创 我的第一个VHDL程序

我的第一个VHDL程序

2022-10-10 17:04:15 413

原创 Python:面向对象编程的三大特性讲解

Python:面向对象编程的三大特性讲解

2022-10-02 19:10:02 429

原创 我的Linux学习(9.28)

我的Linux学习(9.28)

2022-09-28 09:54:28 347

原创 我的Docker之路(9.25)

我的Docker之路(9.25)

2022-09-25 09:24:39 427

原创 我的linux学习(9.24)

我的linux学习(9.24)

2022-09-25 07:56:58 254

原创 我的Linux学习(9.23)

我的Linux学习(9.23)

2022-09-23 21:48:26 86

原创 9.22,Linux学习

我的云边协同之路(9.22,Linux学习)

2022-09-22 19:28:37 162

原创 python装饰器理解

python装饰器理解

2022-09-20 15:18:18 166

原创 Kubeedge集群搭建(1)

Kubeedge集群搭建

2022-09-10 17:35:41 393

原创 Kubernetes集群

Kubernetes集群学习笔记(1)

2022-09-10 11:22:10 186

原创 2017年D题优秀论文再现

优秀国赛论文解读

2022-09-04 23:55:57 1392

原创 三大卷积方式的对比

三大卷积方式的对比

2022-09-03 15:32:09 1897

空空如也

空空如也

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

TA关注的人

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