高性能C++网络库

862 阅读1分钟

最近开源了一个C++网络库,基于线程池与IO多路复用,并实现了异步日志、IO缓冲等。

主要组件:

线程池:由IO线程构成,每个IO线程有独立的epoll文件句柄,使用互斥锁保护线程池共享数据。服务端IO线程抢占互斥锁对监听套接字注册读事件,客户端IO线程抢占互斥锁从连接池中获取连接目标。

IO缓冲:在堆区预分配内存并可自动扩容,支持非阻塞IO。

异步日志:采用行缓冲模式,线程安全,析构时优雅退出。使用两个后台线程分别输出至stdout与stderr,IO线程调用重载方法将输出写入缓冲区后唤醒后台线程。

主要特点:

1.套接字可读时自动读取对端报文数据至缓冲区,写套接字时若缓冲区已满会自动注册写事件进行异步写入。并对缓冲区设计内存池防止短连接时频繁申请、释放内存。

2.使用epoll/非阻塞io提高线程进行connect、accept、read、write系统调用时的性能。

3.根据线程负载情况调节抢占互斥锁时的行为,避免线程负载集中或空负载。

性能及稳定性测试:

实现消息转发服务端及压测客户端,本地两万并发量压测,并尝试将连接断开,系统运行稳定。

有任何问题及建议,欢迎评论!

如果喜欢,可以给个Star么,谢谢!

github.com/GeniusDai/c…