Appearance
👋 关于
我主要使用 C++ 在 Linux 上构建服务端程序,并通过实际项目学习并发控制、进程管理、网络 I/O 与工程化交付。
我对系统软件的兴趣来自那些具体的问题:队列满载时应该怎样取舍,子进程退出后状态如何收敛,服务停止时如何确保资源被正确回收。下面两个项目,是我对这些问题的持续实践。
🚀 精选项目
🖥️ runnerd
一个面向本地单用户环境的 Linux 任务执行服务。客户端通过 Unix Domain Socket 提交任务,守护进程负责启动、监控和回收对应的子进程。
服务以一个 LT epoll 事件循环处理客户端连接、子进程标准流与 SIGCHLD 事件;使用 signalfd + waitpid 驱动任务状态变化,并用长度前缀协议与增量解码处理 Stream Socket 的拆包和粘包。任务通过 fork/execve 与独立进程组执行,不依赖 Shell。
项目包含协议、状态转移、进程监管和端到端测试。当前版本有意聚焦可信单用户 Linux 场景,认证、沙箱隔离、持久化和任务取消仍是后续工作。
C++17 · epoll · Unix Domain Socket · fork/execve · signalfd
📝 cpp_logger
一个 C++17 异步日志库。业务线程提交日志,后台线程完成批量格式化、写入和文件滚动;通过有界队列将业务路径与文件 I/O 解耦。
库提供 Block、DropNewest 和 DropOldest 三种过载策略,并保留队列长度、峰值和丢弃量等指标。除了文件与控制台输出,也支持自定义 LogSink;项目提供 CMake 包、跨平台 CI、静态分析与 Sanitizer 检查。
性能记录
在 Windows x64、MSVC Release 环境下,使用 4 个生产者、128 B 日志正文和
Block策略进行测试。完成队列排空、刷新和实际落盘校验后的端到端中位吞吐为 136.89 万条/秒,丢弃率为 0%。
C++17 · 多线程 · 异步 I/O · CMake · CTest
💡 我在意的事
可靠的系统往往不只取决于主流程能否运行,还取决于失败、过载和退出时是否仍有清晰的行为。因此,我会把测试、日志、状态管理和构建验证视为项目的一部分,而不是交付之后再补上的工作。
🧭 最近在做
- 继续完善
runnerd的任务调度、可观测性与可靠性边界 - 深入学习 C++ 并发、Linux 网络编程和性能分析
- 把项目中的设计取舍、测试方法和问题排查过程整理为长期笔记
📫 联系方式
- GitHub:qxf-72
- 邮箱:xiaofeng_qiu@qq.com
- 网站:xiaofeng-qiu.me