2017-02-20 91 views
1

如果我有兩個進程,爲什麼繁忙的等待會避免上下文切換?爲什麼在這種情況下上下文切換比浪費CPU時間更便宜?如果有線程而不是進程,會發生什麼變化?忙等待和上下文切換

謝謝!

回答

2

爲什麼忙等待避免上下文切換,

忙等待避免上下文切換!上下文切換是調度程序決定讓CPU運行到其他進程的過程。忙碌的等待是一種技術,用於保持過程循環和等待某件事情。即防止兩個進程同時修改某些共享數據。一個進程將循環,直到另一個進程「告訴」他已完成。這是一種糟糕的同步方法,因爲CPU利用率下降,因爲進程花費時間突然無所事事。

爲什麼上下文切換是不是浪費CPU時間

DEPENDS更便宜!如果臨界區中的代碼很短,則繁忙的等待可能比上下文切換快。一個進程可以忽略信號,並通過這種方式運行在CPU上,直到它自動地將其釋放。 注意並非所有信號都可以忽略。

如果有線程而不是進程,會發生什麼變化?

恐怕這太回答了,因爲這可能取決於操作系統,如果操作系統知道線程。

+0

我只有一個問題與你的answear,忙等待不是一個糟糕的同步方法,這取決於用例。有時,當事件不需要太長時間時,最好使用繁忙的等待而不是內核事件,因爲內核對象引入的開銷太多,並且如果您知道事件(或信號)將在很短的時間內處於忙碌狀態實際上等待是一種更好的方法,如果在繁忙的等待中花費的時間小於這個開銷,那麼在用戶模式和內核模式之間切換可能會過度。 –

+0

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