Skip to content
On this page

👋 你好,我是 Felix Qiu

C++ / Linux 后端开发工程师
用现代 C++ 构建可运行、可验证的并发与系统服务。

GitHub · 个人网站 · Email


👋 很高兴认识你

我是一名专注于 C++ 与 Linux 后端开发的工程师。相比只实现功能,我更喜欢把并发、进程管理和网络 I/O 中的抽象概念,做成能够运行、测试和持续改进的系统。

我特别关注程序在边界情况下的表现:队列满载时如何取舍、任务异常如何传递、子进程如何回收、服务关闭后资源是否仍然可控。这些问题也是我持续学习系统编程的动力。

🧭 我正在做什么

  • 构建和完善 Linux 本地任务执行服务 runnerd
  • 深入学习 C++ 并发、资源管理与性能分析
  • 练习 Linux 网络编程、事件驱动 I/O 与服务端设计
  • 把学习所得沉淀为有测试、有文档的工程项目

🚀 项目作品

🖥️ runnerd:事件驱动的 Linux 任务执行守护进程

面向单机、单用户场景的本地任务执行服务。客户端 runnerctl 通过 Unix Domain Socket 提交和查询任务,runnerd 负责启动、监控与回收子进程。

  • 用一个 LT epoll 事件循环统一处理客户端连接、子进程标准流与 SIGCHLD;以 signalfd + waitpid 驱动任务生命周期
  • 设计长度前缀协议和增量解码器,处理 Stream Socket 的拆包、粘包及二进制负载;通过非阻塞管道采集输出
  • 使用 fork/execve 与独立进程组执行任务,不经过 Shell;实现 QUEUED → RUNNING → SUCCEEDED / FAILED 状态机与命令行查询
  • 使用 GoogleTest、CTest 和 GitHub Actions 覆盖协议、状态转移、进程监管和端到端流程

C++17 Linux epoll Unix Domain Socket fork/execve signalfd

当前边界: runnerd 是面向可信单用户 Linux 环境的实验性项目;暂不包含认证、沙箱隔离、持久化、任务取消和真正生效的执行超时机制。

📝 cpp_logger:异步日志库

一个面向本地应用的 C++17 异步日志库:业务线程快速提交日志,后台线程完成批量格式化、写入和文件滚动。

  • 使用有界阻塞队列解耦业务线程与文件 I/O,并提供 BlockDropNewestDropOldest 三种过载策略
  • 支持五级日志过滤、毫秒时间戳、线程 ID、源位置以及按日期或文件大小滚动
  • 通过批量写入降低 I/O 开销,并提供队列长度、峰值和丢弃量等可观测指标
  • 支持 FileSinkConsoleSink 与自定义 LogSink;提供 CMake 包、测试、CI 和 Sanitizer 检查

C++17 多线程 条件变量 异步 I/O CMake CTest ASan TSan

🧵 cpp_thread_pool:轻量级线程池

一个基于 C++17 标准库实现的线程池,覆盖任务提交、调度、执行、结果返回与优雅关闭的完整并发链路。

  • 支持固定线程与 Cached 动态扩容两种模式,额外线程可在空闲后自动回收
  • 使用 std::packaged_taskstd::future<T> 返回结果,并将任务异常传递至 future.get()
  • 通过有界队列限制任务积压;队列满时按配置等待,超时后拒绝提交
  • 实现可重入的 shutdown() 与关闭后重启,并覆盖并发关闭、重复启动和队列满载等边界场景

C++17 线程池 std::future 条件变量 泛型编程 CMake

💡 我关心的工程问题

  • 清晰的资源所有权、生命周期和错误处理路径
  • 可观测的系统状态,以及发生过载或失败时明确的行为
  • 用测试、持续集成和工具链把实现交付为可维护的工程

🛠️ 技术栈

C++ 与并发Linux 系统编程工程实践
C++17、RAII、模板、泛型编程epoll、非阻塞 I/O、Unix Domain SocketCMake、CTest、GoogleTest、GitHub Actions
std::thread、互斥锁、条件变量、原子操作forkexecve、管道、进程组、waitpidsignalfdclang-format、clang-tidy、ASan、TSan
线程池、任务队列、异步日志、std::future长度前缀协议、增量解码、子进程输出采集VitePress、Nginx、HTTPS、Linux 服务器部署

📫 联系我