-
高并发非阻塞网络库
采用多Reactor多线程模型,实现高并发非阻塞的网络库。 -
智能指针防止悬空指针
TcpConnection继承自enable_shared_from_this,其目的是防止在不该被释放对象的地方释放对象,导致悬空指针的产生。
这样可以避免用户可能在处理OnMessage事件时删除对象,确保TcpConnection以正确方式释放。 -
唤醒机制
EventLoop中使用了eventfd来调用wakeup(),让mainloop唤醒subloop的epoll_wait阻塞。 -
一致性哈希轮询算法
新增ConsistenHash头文件,采用一致性哈希轮询算法,将EventLoop合理分发给每一个TcpConnection对象。
此外,支持自定义哈希函数,满足高并发需求,但需要注意虚拟节点数量不能过少。 -
线程创建有序性
在Thread中通过C++ lambda表达式以及信号量机制,保证线程创建的有序性,确保线程正常创建后再执行线程函数。 -
非阻塞核心缓冲区
Buffer.*是muduo网络库非阻塞的核心模块。当触发相应的读写事件时,内核缓冲区可能没有足够空间一次性发送数据,此时有两种选择:- 第一种是将其设置为非阻塞,但可能造成 CPU 忙等待;
- 第二种是阻塞等待内核缓冲区有空间再发送,但效率低下。
为了解决这些问题,
Buffer模块将多余数据存储在用户缓冲区,并注册相应的读写事件监听,待事件再次触发时统一发送。 -
灵活的日志模块
Logger支持设置日志等级。在调试代码时,可以开启DEBUG模式打印日志;而在服务器运行时,为了减少日志对性能的影响,可关闭DEBUG相关日志输出。
guapia233/Refactoring-muduo
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|