ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

操作系统八股开源笔记分享

操作系统八股开源笔记分享 进程和线程[图片][图片][图片][图片][图片][图片][图片]死锁[图片][图片][图片][图片]IO多路复用Q什么是 IO 多路复用IO 多路复用的核心思想是IO 多路复用就是一个线程同时监听多个文件描述符当某个连接可读可写时再去处理它。它解决的是高并发场景下线程数量过多的问题所以比传统 BIO 的“一连接一线程”模型更适合高并发。常见实现有 select、poll、epoll其中 epoll 的优势在于事件驱动和返回就绪 fd所以在 Linux 下最常用。Qselect、poll、epoll 有什么区别select有监听数量上限每次调用都要把所有 fd 从用户态拷贝到内核态遍历成本较高poll解决了 select 的数量上限问题但本质上仍然需要轮询遍历epoll基于事件驱动不需要每次完整遍历所有 fd在大量连接场景下性能更好所以高并发网络编程里最常见的是 epoll。epoll 的 LT 和 ET 模式Q什么是 LT 和 ETepoll 常见有两种触发模式LTLevel Trigger水平触发只要缓冲区里还有数据没处理完就会持续通知ETEdge Trigger边缘触发只有状态变化时通知一次不会反复提醒面试里最常问的是区别LT 更稳更不容易漏处理ET 性能潜力更高但要求一次把数据尽量读完否则容易漏事件如果你答 Netty也可以补一句ET 模式通常要配合非阻塞 IO 一起用。Q为什么 epoll 比 select、poll 更高效关键是两个点监听集合管理更高效返回的是就绪事件不是所有 fd也就是说select/poll 的问题不只是“API 老”而是每次都要把关注列表从用户态拷到内核态每次都要遍历全量 fd而 epoll 更接近“先注册、后通知”的模式所以在连接数大、活跃连接比例低的场景下更有优势。Q阻塞/非阻塞、同步/异步有什么区别这四个概念最容易混。建议分成两个维度来答阻塞 / 非阻塞调用线程会不会被挂起等待同步 / 异步结果是不是还要调用方主动参与处理常见组合理解BIO同步阻塞NIO 多路复用同步非阻塞AIO异步非阻塞所以 IO 多路复用并不等于异步它更准确地说是同步非阻塞的事件驱动模型。Q零拷贝是什么零拷贝关注的是 数据搬运路径优化IO 多路复用关注的是 连接事件处理效率。两者解决的问题不一样IO 多路复用减少线程数量提升连接管理效率零拷贝减少用户态和内核态之间的数据复制、减少 CPU 参与典型零拷贝手段有mmapsendfile面试时不要把它们混成一个概念但可以说明它们经常一起出现在高性能网络框架里。Reactor 模型怎么理解QIO 多路复用和 Reactor 有什么关系IO 多路复用提供的是“事件监听能力”Reactor 提供的是“事件分发模型”。可以这样理解epoll 负责告诉你“哪个连接就绪了”Reactor 负责把这个就绪事件分发给对应处理器所以像 Java NIO、Netty本质上都是底层用 IO 多路复用监听事件上层用 Reactor 组织事件处理流程为什么要有 CPU 缓存Q为什么主存前面还要加多级缓存因为 CPU 的计算速度远快于主存访问速度如果每次取数据都直接访问内存CPU 会经常空等。所以现代计算机一般会设计成L1 缓存L2 缓存L3 缓存主存这本质上是在解决 CPU 和内存速度不匹配 的问题。Linux常用命令查看进程和资源Q排查线上问题时你常用哪些 Linux 命令我最常用的有top / htop看 CPU、内存、进程资源占用ps -ef看进程信息free -m看内存df -h看磁盘空间du -sh看目录大小查看日志和网络Q常见日志和网络排查命令有哪些常见会用到tail -f实时看日志grep过滤关键字less分页查看文件netstat / ss看端口和连接lsof -i看端口占用如果是 Java 服务排障还经常会配合 jps、jstack、jmap 一起用。CPU 过高时看什么Q线上 CPU 飙高时你一般怎么查我的排查顺序通常是top 看整体 CPU 占用top -Hp 看哪个线程最耗 CPUps -mp -o THREAD,tid,time 辅助看线程把线程 ID 转成 16 进制再配合 jstack 找具体代码栈如果是面试建议把“命令 思路”一起说出来不要只背命令名。内存问题怎么查Q怀疑内存有问题时你会用哪些命令常见组合是free -m看整体内存和 swaptop看哪个进程吃内存vmstat看内存、换页、上下文切换pmap -x 看具体进程内存映射如果是 Java还会继续配合jmap -histojcmd GC.heap_info磁盘和 IO 问题怎么查Q磁盘满了或者 IO 异常时怎么查我一般这么查df -h先看分区整体使用率du -sh *看哪个目录占空间大du -sh /path/* | sort -h逐层缩小范围iostat -x看磁盘读写压力和 util磁盘类问题最常见的坑是日志膨胀临时文件没清理大目录或大文件积压网络问题怎么查Q端口占用、连接异常、超时问题怎么查常用命令有ss -lntp看监听端口和对应进程lsof -i :端口号看某个端口被谁占了netstat -anp看连接状态ping测连通性curl测接口可达性和返回如果连接很多还要关注ESTABLISHEDTIME_WAITCLOSE_WAIT这些 TCP 状态常常是面试追问点。用户态和内核态Q什么是用户态和内核态用户态是应用程序运行的受限环境权限较低内核态是操作系统内核运行的高权限环境能直接操作硬件资源。像网络 IO、磁盘 IO、进程调度等很多能力都需要从用户态切到内核态完成。
返回列表