我知道linux决定线程在哪些核心上运行,因此,每个核心的任务保证是平衡的。但是我在哪里可以看到介绍性文档呢?
我想了解一下具体的实现
-----2022-2-14----
调度算法都是关于调度策略的,很少涉及进程内线程如何分配和迁移,我知道有线程窃取技术,类似于go的实现。
大多数操作系统书籍只讲进程和线程,但也省略了如何在多核上调度。
答案1
我记得当一个核心有进程的缓存时,内核会尝试在同一核心上重新安排线程,但这并不能保证,并且通常可以重新安排在任何可用核心上运行。例如,内核通常会在核心中的主线程和辅助线程之间交替调度进程,以便如果核心饱和,则辅助线程中的进程不会饥饿。
但是,线程也可能请求仅将其安排在一组特定的核心上运行。如果进程知道会存在缓存问题,则可能会请求此操作,但更常见的是,当特定套接字有权访问该进程需要访问的特定 I/O 设备时,会执行此操作,并且跨套接字 I/O 会很昂贵。
其中一个示例是访问映射到特定 CPU 插槽的 PCI 插槽中的 GPU。