了解有关多线程的基本概念

时间:2014-10-04 22:39:38

标签: multithreading operating-system

问题: 一次在多个处理器上一起调度进程的所有线程与在各个处理器可用时一次调度一个线程(来自不同进程)的优点和/或可能的缺点是什么?

更新注意:考虑多处理器和具有两个线程的进程。假设一次只运行一个线程。当前正在运行的线程向第二个线程发送一条消息,然后阻塞等待回复(因此从CPU中取出)。一段时间后,第二个线程被调度,从第一个线程接收消息,发送回复,然后阻止等待来自第一个线程的新消息。一段时间后,第一个线程被调度,处理回复,发送新消息然后被阻塞等待新回复,依此类推。如果两个线程同时运行,则可以避免所有这些切换。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,那么调度线程作为处理器变得可用并让它们在该处理器上调度另一个线程之前运行完成通常会在总吞吐量方面更有效,因为你不会有开销上下文切换。但是,这假设进程/线程本身就是行为 - 相反,如果线程进入无限循环或变得死锁,那么您将永久地失去对其处理器的访问权限。调度所有要一次运行的所有内容会引入上下文切换开销,但如果线程/处理器运行良好,那么您仍然可以依赖操作系统偶尔中断它并让另一个线程/进程在该处理器上执行某些操作

答案 1 :(得分:1)

通常,一次在多个处理器上一起调度进程的所有线程会浪费处理器。如果一个8核处理器在进程X中运行2个线程的两个核心而另一个进程Y有7个线程准备就绪,你会怎么做?完全拒绝参加Y?

准备好的线程集随着硬件中断的发生而变化,正在运行的线程进行系统调用。强制调度算法采用“进程中无所有线程”或“无”策略是一种不合理的约束。