2017-02-20 99 views
1

如果我有两个进程,为什么繁忙的等待会避免上下文切换?为什么在这种情况下上下文切换比浪费CPU时间更便宜?如果有线程而不是进程,会发生什么变化?忙等待和上下文切换

谢谢!

回答

2

为什么忙等待避免上下文切换,

忙等待避免上下文切换!上下文切换是调度程序决定让CPU运行到其他进程的过程。忙碌的等待是一种技术,用于保持过程循环和等待某件事情。即防止两个进程同时修改某些共享数据。一个进程将循环,直到另一个进程“告诉”他已完成。这是一种糟糕的同步方法,因为CPU利用率下降,因为进程花费时间突然无所事事。

为什么上下文切换是不是浪费CPU时间

DEPENDS更便宜!如果临界区中的代码很短,则繁忙的等待可能比上下文切换快。一个进程可以忽略信号,并通过这种方式运行在CPU上,直到它自动地将其释放。 注意并非所有信号都可以忽略。

如果有线程而不是进程,会发生什么变化?

恐怕这太回答了,因为这可能取决于操作系统,如果操作系统知道线程。

+0

我只有一个问题与你的answear,忙等待不是一个糟糕的同步方法,这取决于用例。有时,当事件不需要太长时间时,最好使用繁忙的等待而不是内核事件,因为内核对象引入的开销太多,并且如果您知道事件(或信号)将在很短的时间内处于忙碌状态实际上等待是一种更好的方法,如果在繁忙的等待中花费的时间小于这个开销,那么在用户模式和内核模式之间切换可能会过度。 –

+0

@EduG的确如此。我在我的回答中提到了它。有时候,忙碌的等待可能比通过上下文切换更好。 –