元婴期

15. 什么是线程池?它如何提高系统性能?

线程池是一种多线程管理模式,允许应用程序在执行任务时复用有限数量的线程,而不需要为每个任务单独创建和销毁线程。

提高性能的原因

  • 降低线程创建和销毁的开销:创建和销毁线程需要操作系统进行资源分配,而线程池通过复用线程,减少了频繁的资源分配和回收。

  • 更好地控制并发数量:线程池可以限制同时执行的线程数,防止系统资源被大量线程耗尽。

  • 任务队列管理:未完成的任务会进入等待队列,有序执行,避免系统过载。


16. 什么是内存碎片?如何处理和减少内存碎片?

内存碎片 是指内存分配后,剩余的小块内存无法被有效利用。

内存碎片分为两种类型:

  • 外部碎片:多个小块空闲内存分散存在,但无法满足大块内存分配请求。

  • 内部碎片:已分配的内存块比实际需要的内存大,导致部分空间浪费。

处理和减少内存碎片的方法

  • 内存紧凑:通过将数据移动,合并分散的空闲内存块,减少外部碎片。

  • 分页或分段:使用分页或分段机制,分配固定大小的内存块,减少内部碎片。

  • 垃圾回收:使用自动垃圾回收机制回收无用的内存并进行优化。


17. 计算机系统中的 LRU(最近最少使用)缓存置换算法是什么?如何实现?

LRU算法 是一种常用的缓存替换策略。当缓存已满,需要替换时,LRU 会移除最近最少使用的缓存块。

实现

  • 维护一个有序的链表,每次数据被访问时,移动到链表的头部。

  • 当缓存满了时,删除链表尾部的数据块。

更高效的实现可以使用 哈希表 + 双向链表,哈希表用于快速查找缓存块,双向链表维护访问顺序。


18. 非易失性存储(NVM)与易失性存储的区别是什么?NVM 在现代系统中的应用有哪些?

  • 非易失性存储(NVM):在设备断电后数据依然保留(如 SSD、硬盘)。

  • 易失性存储:断电后数据丢失(如 RAM)。

NVM 的应用

  • SSD:现代固态硬盘通过 NVM 提供高速、稳定的存储。

  • 持久性内存(如 Intel Optane):结合了 RAM 的速度和硬盘的持久性,应用于高性能计算领域。

  • NVM Express(NVMe)协议:优化了 NVM 存储设备与主机之间的数据传输速度。


19. 什么是 NUMA(非均匀内存访问架构)?它对系统性能的影响是什么?

NUMA 是一种计算机内存架构,在多处理器系统中,每个处理器有自己专属的本地内存,访问本地内存较快,访问其他处理器的内存较慢(非均匀访问)。

对系统性能的影响

  • 提高局部性:当处理器优先访问本地内存时,系统性能提高。

  • 降低内存访问延迟:但如果处理器频繁访问其他处理器的内存,系统性能会下降。

NUMA 适用于高并发、多核系统的优化设计,通过合理调度任务和数据,避免跨节点访问,提升整体性能。


20. 什么是自旋锁?它与互斥锁(Mutex)的区别是什么?

自旋锁互斥锁 都是多线程编程中的同步机制,但它们的工作方式不同。

自旋锁:当一个线程尝试获取锁而锁被占用时,线程会一直处于忙等待状态(自旋),直到锁释放。

简单理解就是当线程获取到锁被占用时,该线程就会一直在这里循环等待,直到检测到锁可用。自旋锁适合锁等待时间较短的场景。

互斥锁:当线程获取锁失败时,操作系统会将该线程挂起,直到锁可用,避免 CPU 资源的浪费。适合锁等待时间较长的场景。

区别

  • 自旋锁不会阻塞线程,但会占用 CPU 资源。

  • 互斥锁会阻塞线程,但在等待锁期间不占用 CPU 资源。


21. 什么是CAS(Compare-And-Swap)操作?它在并发编程中的应用是什么?

CAS 是一种无锁的原子操作,用于解决多线程并发问题。

工作原理

  • 读取内存中的某个值。

  • 比较该值是否为预期值。

  • 如果相等,则将该值更新为新值;如果不相等,表示该值已经被其他线程修改,操作失败。

CAS 操作常用于无锁数据结构的实现,如 原子变量无锁队列,能在多线程环境下确保数据的一致性和安全性,而无需使用锁,减少了锁竞争,提高了并发性能。

results matching ""

    No results matching ""