秋招学习笔记 day48

1.线程池介绍一下

线程池是提前创建的一组线程,处理工作队列中的任务,用于短任务处理和高并发的场景,比如日志打印,数据库查询异步处理等操作,线程池避免了频繁创建销毁线程带来的开销,不过也不能过多因为线程切换也会带来开销。

线程池满怎么处理

线程池中的任务积压在任务队列中,如果任务队列满,可以直接拒绝服务,可以要求提交任务队列的线程完成任务,可以按照优先级给任务分类,然后把低优先级的任务丢弃,如果频繁的出现工作队列满要考虑增加工作队列大小,增加线程池中线程数目或者横向扩展。

2.线程切换的开销有什么

线程切换就是保存和恢复运行状态,包括程序计数器,寄存器,栈指针,如果是不同进程的线程还需要进行地址切换,保存和切换页表寄存器内容,切换页表内容,而且线程切换会导致 cpu cache 命中率下降,tlb 命中下降。

用户态和内核态切换开销

用户态和内核态的切换是同一个进程的切换不会导致地址切换,只切换程序计数器,寄存器和栈指针,切换 cpu 特权级别,执行系统调用,在执行完成之后要恢复用户态上下文。

3.一次 RPC 框架请求的完整过程是什么

首先把客户端的请求序列化,按照调用名和参数封装,然后由 TCP 把字节流封装成段增加 TCP 头包括序号和确认,之后把数据通过服务发现和负载均衡发送给服务端,服务端使用反序列化把数据调用到具体的业务服务,业务服务的结果序列化返回给客户端,然后客户端对数据反序列化得到结果。

RPC 请求从应用层到网络传输的过程是什么

首先是对数据序列化,然后通过 send 或 write 传输到 socket 的发送缓冲区,在缓冲区的数据由 TCP 封装成段,之后由 ip 协议进行路由发现,在此之后由数据链路层封装成帧,并由驱动网卡异步发送。

4.CPU 占用排查

首先通过 top ps 定位进程,然后定位到具体线程之后使用 gdb 调试和性能分析工具查看堆栈等信息,可能的导致 cpu 高占用的比如死循环,锁竞争,要根据堆栈信息和日志定位问题。

相关推荐
蒸蒸yyyyzwd4 天前
后端学习笔记三个知识
笔记·八股
蒸蒸yyyyzwd4 天前
学习笔记 复盘
笔记·八股
香蕉大香蕉(06敬畏市场)5 天前
MySQL 单点详解(09)
java·数据库·mysql·面试·八股·大厂实习
香蕉大香蕉(06敬畏市场)6 天前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
香蕉大香蕉(06敬畏市场)6 天前
MySQL 单点详解(08)
java·数据库·mysql·面试·八股
香蕉大香蕉(06敬畏市场)7 天前
MySQL 单点详解(03)
java·数据库·mysql·面试·八股·大厂实习
蒸蒸yyyyzwd7 天前
学习笔记day92
笔记·八股
香蕉大香蕉(06敬畏市场)9 天前
高频八股 · JVM(8)
java·jvm·面试·八股·大厂实习
蒸蒸yyyyzwd10 天前
kafka、redis、mysql不熟悉问题总结
笔记·八股
香蕉大香蕉(06敬畏市场)10 天前
高频八股 · JVM(7):方法区、元空间与字符串常量池
java·jvm·ai·博客·八股·大厂实习