最近开源了一个C++网络库,基于线程池与IO多路复用,并实现了异步日志、IO缓冲等。
主要组件:
线程池:由IO线程构成,每个IO线程有独立的epoll文件句柄,使用互斥锁保护线程池共享数据。服务端IO线程抢占互斥锁对监听套接字注册读事件,客户端IO线程抢占互斥锁从连接池中获取连接目标。
IO缓冲:在堆区预分配内存并可自动扩容,支持非阻塞IO。
异步日志:采用行缓冲模式,线程安全,析构时优雅退出。使用两个后台线程分别输出至stdout与stderr,IO线程调用重载方法将输出写入缓冲区后唤醒后台线程。
主要特点:
1.套接字可读时自动读取对端报文数据至缓冲区,写套接字时若缓冲区已满会自动注册写事件进行异步写入。并对缓冲区设计内存池防止短连接时频繁申请、释放内存。
2.使用epoll/非阻塞io提高线程进行connect、accept、read、write系统调用时的性能。
3.根据线程负载情况调节抢占互斥锁时的行为,避免线程负载集中或空负载。
性能及稳定性测试:
实现消息转发服务端及压测客户端,本地两万并发量压测,并尝试将连接断开,系统运行稳定。
有任何问题及建议,欢迎评论!
如果喜欢,可以给个Star么,谢谢!