多线程程序里 close 一个描述符后立刻被重用会导致什么竞态?
多线程程序里 close 一个描述符后立刻被重用会导致什么竞态? 本文先给出可直接复述的结论,再用最小代码说明close fd 复用 竞态 多线程的工作方式、判断依据、项目边界和常见误区。
操作系统 · 并发编程面试题第 1 页,显示第 1–50 题,共找到 66 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
多线程程序里 close 一个描述符后立刻被重用会导致什么竞态? 本文先给出可直接复述的结论,再用最小代码说明close fd 复用 竞态 多线程的工作方式、判断依据、项目边界和常见误区。
多个线程同时 epoll_wait 同一个 epoll 实例为什么会产生惊群,如何处理? 本文先给出可直接复述的结论,再用最小代码说明epoll 惊群 多线程 EPOLLEXCLUSIVE的工作方式、判断依据、项目边界和常见误区。
eventfd 和 timerfd 为什么经常出现在 epoll 程序里,它们解决了什么? 本文先给出可直接复述的结论,再用最小代码说明eventfd timerfd epoll 线程唤醒 定时的工作方式、判断依据、项目边界和常见误区。
线上进程文件描述符持续上涨,如何定位是哪里泄漏的? 本文先给出可直接复述的结论,再用最小代码说明文件描述符泄漏 排查 /proc/pid/fd lsof的工作方式、判断依据、项目边界和常见误区。
进程能打开多少个文件描述符受什么限制,调优时应改哪个值? 本文先给出可直接复述的结论,再用最小代码说明ulimit nofile rlimit 文件描述符上限的工作方式、判断依据、项目边界和常见误区。
Linux 中文件描述符在进程内核结构里是如何管理的? 本文先给出可直接复述的结论,再用最小代码说明Linux 文件描述符表 files_struct的工作方式、判断依据、项目边界和常见误区。
为什么 printf 未换行就 fork 会让子进程重复输出同一段内容? 本文先给出可直接复述的结论,再用最小代码说明fork printf 重复输出 用户态缓冲区的工作方式、判断依据、项目边界和常见误区。
io_uring 相比 epoll + 线程池做磁盘异步 I/O 解决了什么核心问题? 本文先给出可直接复述的结论,再用最小代码说明io_uring 共享环形队列 系统调用次数 异步IO的工作方式、判断依据、项目边界和常见误区。
为什么新建文件描述符推荐加 O_CLOEXEC,它解决了哪类问题? 本文先给出可直接复述的结论,再用最小代码说明O_CLOEXEC exec 文件描述符泄漏的工作方式、判断依据、项目边界和常见误区。
向管道并发写入时,多大以内的写能保证原子性? 本文先给出可直接复述的结论,再用最小代码说明PIPE_BUF 管道写原子性的工作方式、判断依据、项目边界和常见误区。
select 在高并发下的三个主要瓶颈是什么? 本文先给出可直接复述的结论,再用最小代码说明select FD_SETSIZE 1024 遍历 性能瓶颈的工作方式、判断依据、项目边界和常见误区。
Shell 重定向和守护进程关闭 0/1/2 的实现依赖 dup2 的什么性质? 本文先给出可直接复述的结论,再用最小代码说明dup2 标准输出重定向 实现原理的工作方式、判断依据、项目边界和常见误区。
为什么高并发服务用 epoll 而不是信号驱动 I/O(O_ASYNC/SIGIO)? 本文先给出可直接复述的结论,再用最小代码说明信号驱动IO SIGIO epoll 对比的工作方式、判断依据、项目边界和常见误区。
删除一个仍被进程打开的文件,磁盘空间何时真正释放? 本文先给出可直接复述的结论,再用最小代码说明unlink 打开文件 磁盘空间 inode 引用计数的工作方式、判断依据、项目边界和常见误区。
write 返回成功后,数据到达磁盘的顺序和时机由什么决定? 本文先给出可直接复述的结论,再用最小代码说明write 写回 dirty page 回写 落盘时机的工作方式、判断依据、项目边界和常见误区。
进程写文件偶尔卡顿数秒,为什么可能是内核写回限流而非磁盘坏了? 本文先给出可直接复述的结论,再用最小代码说明写回限流 dirty_ratio 写卡顿 诊断的工作方式、判断依据、项目边界和常见误区。
cgroup 内存限额达到上限时容器内进程会发生什么? 本文先给出可直接复述的结论,再用最小代码说明cgroup 内存限制 memory.max OOM 容器的工作方式、判断依据、项目边界和常见误区。
fork 之后父子进程如何通过写时复制共享内存页? 本文先给出可直接复述的结论,再用最小代码说明fork 写时复制 copy on write的工作方式、判断依据、项目边界和常见误区。
多线程程序中什么是伪共享(false sharing),如何避免? 本文先给出可直接复述的结论,再用最小代码说明伪共享 false sharing 缓存行 多线程的工作方式、判断依据、项目边界和常见误区。
为什么 fork 一个大内存进程通常很快,什么情况下 fork 会变慢? 本文先给出可直接复述的结论,再用最小代码说明fork 性能 页表复制 开销的工作方式、判断依据、项目边界和常见误区。
为什么 free 之后进程的 RSS 往往不会立即下降? 本文先给出可直接复述的结论,再用最小代码说明free 内存不释放 RSS glibc的工作方式、判断依据、项目边界和常见误区。
如何区分进程是内存泄漏还是被 glibc 分配器缓存了内存? 本文先给出可直接复述的结论,再用最小代码说明内存泄漏 诊断 RSS 增长 malloc的工作方式、判断依据、项目边界和常见误区。
Linux OOM Killer 如何挑选要杀死的进程? 本文先给出可直接复述的结论,再用最小代码说明OOM Killer 选择机制 oom_score的工作方式、判断依据、项目边界和常见误区。
原子操作和无锁编程能解决什么问题,为什么原子变量不等于线程安全? 本文先给出可直接复述的结论,再用最小代码说明原子操作 无锁编程的工作方式、判断依据、项目边界和常见误区。
Linux CFS 完全公平调度器如何用 vruntime 决定下一个运行的任务? 本文先给出可直接复述的结论,再用最小代码说明Linux CFS vruntime 调度的工作方式、判断依据、项目边界和常见误区。
条件变量为什么必须与互斥锁配合、wait 为什么要在 while 循环里? 本文先给出可直接复述的结论,再用最小代码说明条件变量 虚假唤醒 while的工作方式、判断依据、项目边界和常见误区。
为什么频繁上下文切换会降低性能,如何在压测中观测? 本文先给出可直接复述的结论,再用最小代码说明上下文切换开销 vmstat的工作方式、判断依据、项目边界和常见误区。
一次进程上下文切换具体保存和恢复哪些内容? 本文先给出可直接复述的结论,再用最小代码说明进程上下文切换 保存内容的工作方式、判断依据、项目边界和常见误区。
CPU 亲和性是什么,绑核在什么场景能提升性能? 本文先给出可直接复述的结论,再用最小代码说明CPU 亲和性 sched_setaffinity的工作方式、判断依据、项目边界和常见误区。
死锁的四个必要条件是什么,面试中如何用它推导排查思路? 本文先给出可直接复述的结论,再用最小代码说明死锁 四个必要条件的工作方式、判断依据、项目边界和常见误区。
线上进程疑似死锁,如何用 gdb、pstack 或 /proc 定位持锁线程? 本文先给出可直接复述的结论,再用最小代码说明死锁排查 gdb 线程栈的工作方式、判断依据、项目边界和常见误区。
epoll 水平触发与边缘触发的区别是什么,ET 模式为什么必须配非阻塞 fd? 本文先给出可直接复述的结论,再用最小代码说明epoll LT ET 非阻塞的工作方式、判断依据、项目边界和常见误区。
eventfd 适合什么场景,它和 pipe 做线程间通知相比好在哪? 本文先给出可直接复述的结论,再用最小代码说明eventfd 线程通知的工作方式、判断依据、项目边界和常见误区。
Unix socket 的 SCM_RIGHTS 如何实现进程间传递文件描述符? 本文先给出可直接复述的结论,再用最小代码说明SCM_RIGHTS 文件描述符传递的工作方式、判断依据、项目边界和常见误区。
fork 之后再 exec 的典型流程是什么,为什么 Unix 要拆成两步? 本文先给出可直接复述的结论,再用最小代码说明fork exec 两步创建进程的工作方式、判断依据、项目边界和常见误区。
futex 是什么,为什么说它是 Linux 用户态锁的基石? 本文先给出可直接复述的结论,再用最小代码说明futex 用户态锁的工作方式、判断依据、项目边界和常见误区。
管道、消息队列、共享内存、socket 之间如何按场景选型? 本文先给出可直接复述的结论,再用最小代码说明IPC 方式选型的工作方式、判断依据、项目边界和常见误区。
活锁和死锁的区别是什么,什么设计会引入活锁? 本文先给出可直接复述的结论,再用最小代码说明活锁 死锁 区别的工作方式、判断依据、项目边界和常见误区。
Linux load average 包含哪些状态的进程,高负载一定代表 CPU 忙吗? 本文先给出可直接复述的结论,再用最小代码说明Linux load average 含义的工作方式、判断依据、项目边界和常见误区。
固定加锁顺序为什么能预防死锁,跨模块代码如何约定顺序? 本文先给出可直接复述的结论,再用最小代码说明加锁顺序 预防死锁的工作方式、判断依据、项目边界和常见误区。
Linux 内核 lockdep 是如何在运行时检测潜在死锁的? 本文先给出可直接复述的结论,再用最小代码说明lockdep 死锁检测的工作方式、判断依据、项目边界和常见误区。
条件变量的丢失唤醒问题是怎么发生的,如何正确使用避免? 本文先给出可直接复述的结论,再用最小代码说明条件变量 丢失唤醒的工作方式、判断依据、项目边界和常见误区。
为什么多线程程序需要内存序,x86 和 ARM 上的可见性差异在哪? 本文先给出可直接复述的结论,再用最小代码说明内存序 memory ordering的工作方式、判断依据、项目边界和常见误区。
mmap 共享映射如何实现进程间通信,MAP_SHARED 与 MAP_PRIVATE 差异是什么? 本文先给出可直接复述的结论,再用最小代码说明mmap MAP_SHARED 进程通信的工作方式、判断依据、项目边界和常见误区。
pthread_mutex 在 Linux 上基于 futex 如何做到无竞争时零系统调用? 本文先给出可直接复述的结论,再用最小代码说明pthread mutex futex 实现的工作方式、判断依据、项目边界和常见误区。
互斥锁和信号量的本质区别是什么,能用二值信号量替代互斥锁吗? 本文先给出可直接复述的结论,再用最小代码说明互斥锁 信号量 区别的工作方式、判断依据、项目边界和常见误区。
nice 值如何影响 CFS 中进程实际获得的 CPU 时间? 本文先给出可直接复述的结论,再用最小代码说明nice 值 CFS 权重的工作方式、判断依据、项目边界和常见误区。
Linux OOM killer 如何挑选要杀掉的进程,如何保护关键进程? 本文先给出可直接复述的结论,再用最小代码说明OOM killer oom_score_adj的工作方式、判断依据、项目边界和常见误区。
孤儿进程为什么会被 init 收养而不是变成僵尸? 本文先给出可直接复述的结论,再用最小代码说明孤儿进程 init 收养的工作方式、判断依据、项目边界和常见误区。
匿名管道和命名管道 FIFO 的区别是什么,管道的容量与阻塞行为如何? 本文先给出可直接复述的结论,再用最小代码说明管道 FIFO 区别 阻塞的工作方式、判断依据、项目边界和常见误区。