ServerLib-Linux平台多线程网络库

ServerLib是一个用C++11编写的轻量级多线程网络库,专为Linux平台设计。它采用Reactor设计模式,包含EventLoop和Channel类来管理文件描述符(fd)。此外,库还提供了高效的Log实现,采用双缓冲区减少多线程环境下的文件写入开销,并计划实现计算线程池和网络功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ServerLib

C++ Library for server
github: https://github.com/bobbymly/ServerLib/

项目简介

用 C++11 编写的 Linux 平台上的轻量级多线程网络库

项目结构

  • 采用 Reactor 设计模式

fd 管理

  • Channel 类: 负责一个 fd 的事件,包含 fd 和 fd 事件的各种回调函数
  • EventLoop 类: 每一个线程包含一个 EventLoop 对象,对 IO 线程(即 SubReactor)而言,每个EventLoop包含一个 Epoll ,管理多个 fd,即关联多个Channel,作为一个时间循环处理Epoll中的活跃事件。

Log 实现

由于在多线程环境下频繁的文件读写会造成很大的性能损失,故采用双缓冲区设计。

预先准备两个缓冲区 A B ,由各个产生 Log 信息的线程 向 A 缓冲区写入, 当 A 写满后 交换 A B 缓冲区(使用 std::move)移动语义避免内存拷贝造成的性能损失。而由 Log 线程向 Log 文件中写入 Log 信息。这样,零散而频繁的文件读写,变成了先收集齐一定的量的Log信息在一次性写入。这样也就只有一个线程需要向文件进行写操作,既降低了操作频率,同时也可以使用无锁操作写文件,提高了效率。

同时,为了避免发生意外时 Log 信息的丢失,除了写满一块缓冲区时需要向文件写入一次外,每隔一段时间(无论 缓冲区 A 是否写满),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值