跳转至

操作系统

常见的内存淘汰机制

  • FIFO
  • LRU
  • LFU
  • CLOCK

并发和并行的区别

  • 并发(Concurrency):
    并发是指在同一时间段内,多个任务交替执行的现象。这些任务可能在时间上有重叠,但在任意时刻只能有一个任务在执行。并发通常用于处理多个任务之间的交互和通信,提高系统资源利用率和响应速度。在单核处理器上,通过操作系统的时间片轮转调度实现任务的并发执行;在多核处理器上,则可以通过线程或进程的并发执行来利用多个核心。
  • 并行(Parallelism):
    并行是指在同一时间段内,多个任务同时执行的现象。这些任务在不同的处理器核心或计算单元上并行运行,每个任务都可以独立执行,无需等待其他任务的完成。并行通常用于加速任务的执行速度,提高系统的吞吐量和性能。在多核处理器上,通过将任务分配给不同的核心并行执行来实现并行计算。

简而言之,并发是指多个任务之间可能交替执行,而并行是指多个任务在同一时刻同时执行。并发更注重于任务之间的交互和通信,适用于处理多任务的场景;而并行更注重于任务的加速和效率提升,适用于需要高性能计算的场景。在实际应用中,通常会同时考虑并发和并行,以达到更好的系统性能和资源利用率。

什么是 ABA 问题

ABA 问题是在多线程环境下的一种数据竞争问题,通常出现在使用 CAS(比较并交换)操作的场景中。

假设一个变量 V 初始值为 A,线程 1 读取 V 的值为 A,然后线程 2 将 V 的值改为 B,接着又改回 A。此时线程 1 再去执行 CAS 操作,它会发现 V 的值仍然是 A,认为没有被其他线程修改过,但实际上 V 经历了从 A 到 B 再到 A 的变化过程。

在某些情况下,这种变化可能会导致问题。例如,在一个链表的操作中,线程 1 根据节点的引用进行操作,在它操作的过程中,节点被其他线程删除并重新插入了一个具有相同值的节点,线程 1 可能会误以为是同一个节点,从而导致操作错误。为了解决 ABA 问题,可以使用版本号或时间戳等方式来记录变量的变化,使得 CAS 操作不仅比较值,还比较版本号或时间戳,确保数据的一致性和正确性。