- 博客(12)
- 收藏
- 关注
原创 深入剖析linux内核epoll源码与原理
rbtree 用来存储所有 io 的数据,方便快速通过io_fd 查找. 对于 rbtree 何时添加:执行 epoll_ctl EPOLL_CTL_ADD 操作,将 epitem 添加到 rbtree 中。关于水平触发与边沿触 发放在 epoll 回调函数执行的时候,如果为 EPOLLET(边沿触发),与之前的 event 对比,如 果发生改变则调用 epoll 回调函数,如果为 EPOLLLT(水平触发),则查看 event 是否为 EPOLLIN, 即可调用 epoll 回调函数。
2023-09-02 20:44:29
344
原创 深入剖析linux 网络io多路复用
而在用户进程这边,整个进程会被阻塞。所以,blocking IO 的特点就是在 IO 执行的两个阶段(等待数据和拷贝数据两个阶段)都被 block 了,所以服务器端的进程就被阻塞在accept()函数这里,一种解决方法是将accept()后的程序放在另外的线程中处理,让accept()继续监听,但这会涉及到线程的创建与销毁,有性能延迟,而创建一个线程池是对应的方法。在linux系统中,涉及到不同资源之间的信息交换的行为叫做io,比如,内存io,磁盘io,网络io就是用户程序与内核程序之间的网络信息交换。
2023-08-10 00:33:59
318
2
原创 深入浅出谈谈网络协议栈的实现原理
在Linux系统中,stdin的文件为0,stdout为1,stderror为2,如果系统没有其他的fd处理,返回的fd将为3,在创建一个socket,创建成功,则fd=4;调用close方发送finish包,表明想要关闭该连接,j进入fin_wait1阶段,另一方发送ack确认包,这时候主动方进入fin_wait2阶段,确认自己的网络信息处理是否完毕,完成后,被动方发送finish包,确认无网络数据处理, 主动方将发送ack确认包,说明网络数据处理完毕。如果bind()失败,则返回负数。
2023-08-09 00:08:38
228
1
原创 谈谈处理海量数据的数据结构-——Hash与BloomFilter
而hash算法的思想是先将元素通过hash函数进行一个区间映射,对元素样本进行拆分,缩小了某一元素查找的样本量,在进行区间类的元素比较,从而确定该样本有该元素。siphash( redis6.0 当中使用,rust 等大多数语言选用的 hash 算法来实现 hashmap,sipHash的设计考虑了安全性和性能之间的平衡,既能够提供足够的安全性,又能够在大多数应用场景下保持高速的计算速度。高可用性:当节点发生故障或增加时,只需调整少量的虚拟节点映射关系,不会导致大规模的数据迁移,从而提高了系统的可用性。
2023-07-30 16:35:11
221
4
原创 使用C++11特性实现一个高效线程池
如果wait包含第二个参数,如果第二个参数不满足,那么wait将解锁互斥量并堵塞到本行,直到某 一个线程调用notify_one或notify_all为止,被唤醒后,wait重新尝试获取互斥量,如果得不到,线 程会卡在这里,直到获取到互斥量,然后继续判断第二个参数,如果表达式为false,wait对互斥 量解锁,然后休眠,如果为true,则进行后面的操作。如果条件满足则向下执行;解锁正在等待当前条件的线程中的一个,如果没有线程在等待,则函数不执行任何操作,如果正在等的线程多余一个,则唤醒的线程是不确定的。
2023-05-23 18:53:10
330
1
原创 谈谈C++智能指针
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的shared_ptr, weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从 一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。一个智能指向指针对象的指针,该对象在堆区;
2023-05-04 16:47:03
945
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人