数据库类程序该用 fsync 还是 fdatasync,为什么 fsync 是性能杀手?
围绕“数据库类程序该用 fsync 还是 fdatasync,为什么 fsync 是性能杀手”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分是否同步元数据以及等待磁盘确认的开销。
操作系统 · 异步编程面试题第 1 页,显示第 1–7 题,共找到 7 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“数据库类程序该用 fsync 还是 fdatasync,为什么 fsync 是性能杀手”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分是否同步元数据以及等待磁盘确认的开销。
围绕“io_uring 相比 epoll + 线程池做磁盘异步 I/O 解决了什么核心问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明提交/完成双环形队列减少系统调用与拷贝、支持真正的文件异步。
围绕“为什么高并发服务用 epoll 而不是信号驱动 I/O(O_ASYNC/SIGIO)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出信号携带信息少、处理函数受限、队列溢出丢失事件。
围绕“sync_file_range 为什么适合写前日志(WAL)这类需要细粒度回写的场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可按字节范围启动回写而不必等待完成,比 fsync 粒度细。
围绕“write 返回成功后,数据到达磁盘的顺序和时机由什么决定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 write 只保证进页缓存、由 flusher 线程异步写回,及掉电风险。
围绕“Linux 信号有哪些不可靠性,为什么信号处理函数里只能调用异步信号安全函数”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明信号不排队、可重入问题及 async-signal-safe 限制。
围绕“signalfd 相比传统信号处理函数解决了什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明把异步信号转为同步 fd 事件、可进 epoll 的优势。