本博客因为部署在netlify, 所以可能会出现部分图片加载不出来的情况。如有必要请科学上网!
基于时间轮的定时器
之前实现的基于升序链表的定时器虽然能实现定时的功能,但是存在一个很明显的缺点:当定时器数量多时,插入一个定时器的时间复杂度时O(n),因为需要保持链表升序。而删除一个定时器的时间复杂度是O(1)(链表是双向的)。于是出现了基于时间轮的定时器, 123...基于升序链表的定时器
定时器通常至少包含两个成员: 超时时间(相对时间或者绝对时间) 任务回调函数 有些时候还可能包含回调函数被执行时需要传入的参数,以及是否重启定时器等信息 下面是一个简单的升序链表定时器实现 1234567891011121314151617181...服务器处理非活动连接
Linux在内核中提供了对连接是否处于活动状态的检查机制,可以通过socket选项中的KEEPALIVE来激活它。不过这种方式将使得应用程序对连接的管理变得复杂。 因此可以考虑在应用层实现类似于KEEPALIVE的机制,来管理所有处于非活动状态的连接...基于半同步半异步模式的进程池
基于半同步/半异步模式的进程池 半同步/半异步模式: 进程池流程图: 代码实现: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454...Linux的IO多路复用
基础知识 用户空间和内核空间 文件描述符 缓存IO和直接IO 同步和异步 阻塞和非阻塞 IO多路复用 select poll epollepoll的LT模式和ET模式
epoll epoll是Linux特有的IO复用函数,关于epoll的原理,参见:Linux的IO多路复用 LT模式 epoll的默认模式,这种情况下epoll相当于一个效率较高的poll。 对于采用LT工作模式的文件描述符,当epoll_wait检...红黑树
概念 一种自平衡的二叉搜索树。每个节点额外存储了一个 color 字段 (“RED” or “BLACK”),用于确保树在插入和删除时保持平衡。 红黑树是 4 阶 B 树(2-3-4 树)的变体。 特点 红黑树本身也是二叉搜索树,具有所有二叉搜索...满二叉树
基本概念: 满二叉树:**层数(高度)**为H,总节点数为的二叉树。(根节点在第1层,所有叶子节点都在第H层)。 此处认为满二叉树 == 完美二叉树。 有些地方存在另一种分类方法:完美(prefect)二叉树、完满(full)二叉树、完全(comp...平衡二叉树(AVL)
如果插入二叉搜索树的元素在插入之前就已经有序,那么插入后的二叉搜索树会退化为链表。在这种情况下,所有操作的时间复杂度将从 劣化为 。因此产生了平衡二叉树,能够实现在插入、删除时保持树的平衡,避免树退化为链表。平衡二叉树全称为:平衡二叉搜索树(Ba...