【发布时间】:2021-07-16 08:43:34
【问题描述】:
我目前正在学习线程的同时多线程、多核和多处理器调度。我查了一些资料,我的理解是:
如果有一个处理器支持同时多线程,它会将一个物理核心变成两个逻辑核心。有两个进程,P1 和 P2。
- 我的理解:在Linux中,每个进程至少由一个线程组成?那么调度是基于线程调度的吗?
P1 和 P2 分别调度到两个逻辑核。他们独立运作。这是第一种情况。如果有一个进程 P3,它由两个线程 t1 和 t2 组成。将 t1 和 t2 分别调度到不同的逻辑核心。那么将两个不同的进程调度到不同的逻辑核和将同一个进程中的不同线程调度到逻辑核有什么区别呢?
- 我的理解:进程是系统的最小单位 分配资源,线程共享进程的资源。 进程中的线程共享虚拟内存、PCB,并且可以访问 相同的数据。因此,当在一个进程中调度不同的线程时 和在不同进程中调度线程,没有区别 为处理器。区别在于地址转换 页表和缓存是否可以共享。对于多核 处理器,处理器不关心线程是否属于 相同的过程。数据的一致性由 MESI 保证。 数据的物理位置由页表保证。
我的理解正确吗?
【问题讨论】:
-
值得注意的是,线程在 Linux 中可能是一个有点误导的术语,因为它暗示它与进程本质上不同。事实上,在 linux 上,线程是由 clone 系统调用创建的独立进程。线程通常定义为共享除堆栈之外的所有内容的另一个进程。
标签: linux multithreading operating-system cpu-architecture scheduling