2011-08-04 32 views
0

這是一個普遍問題。 考慮一個場景,其中我們有一些具有不同優先級的線程。 現在在這種情況下,具有最低優先級的線程將永遠不會控制資源,因爲共享將始終轉到具有最高優先級的線程。 有無論如何我們可以繞過具有更高優先級的線程,並給予資源以低優先級線程?給予控制以始終低於優先級的線程

回答

0

的內置機制是線程的優先級。通過在線程上設置低優先級,您告訴操作系統其活動「不那麼重要」,因此如果線程更重要(優先級更高)需要運行,那麼這些線程優先。

如果你不想讓一個線程獲得潛在的CPU時間,那麼它不應該是一個低優先級的線程。

+0

讓我們假設我的線程必須是低優先級的(其執行同步任務可以在後臺說並且必須是低優先級)。 – Yogi

+0

爲什麼這必須是低優先級? – Iridium

+0

,因爲它不是時間關鍵,而不是讓我們說用戶輸入(按鍵,接聽電話等) – Yogi

0

不一定非要這樣 - 它取決於優先級的實現。你描述它的方式假設高優先級的線程將繼續運行,直到它們完成並從執行時間中剝奪較低優先級的線程。

這可能是實現它的一種方式,但我認爲一個更公平的政策應該是有時間片共享。因此,優先級決定每個線程獲得多少CPU時間,而不一定是它們執行的順序。

這是調度的責任 - Wikipedia:Scheduling

0

如果你覺得這是如何在操作系統中實現,你會看到,低優先級的線程會運行不同的是,他們獲得較少的總時間片,其中執行。即使系統資源不足,低優先級線程也會始終執行。您可能會看到的唯一情況是,只要更高優先級的線程運行,它就不會運行。如果你想知道更多,我會建議查找操作系統可以用來調度進程和線程的不同方法。

如果您正在考慮以編程語言來完成此任務,那麼只需更改線程優先級,以便每次運行時都可以取得更多進展。通常情況下,你有低優先級的線程來做後臺事件,這些事件對時間要求不是很嚴格,或者你不希望線程佔用更多時間作爲更重要的線程。

+0

不,你說的是「不錯」。 「實時優先級」的行爲就像OP說的那樣。 –

+0

取決於他正在討論的調度程序。如果系統陷入困境,一些調度程序永遠不會給低優先級的線程。公平進程調度確保所有線程都會獲得一定的時間,但數量取決於優先級。 –

0

顯然有。等候。如果更高優先級的線程正在等待某些事情(可能是鎖,來自文件,用戶或網絡,​​定時器的數據),則它不可運行,因此下一個更高優先級的線程將運行。

另外非實時優先級通常是一個可變數字。計劃進程的優先級降低,而對於所有進程緩慢增加(達到或達到另一個可調參數)。這樣,如果有多個線程不等待任何事情,每次調度程序都會選擇最長時間不在CPU上的線程。同樣,當資源變得可用時,正在等待的線程將被及時調度,因爲它在等待時收集高優先級(這保持用戶接口響應於後臺進程,否則使用全部CPU)。

+0

它就像我有幾個線程,而我的線程是唯一一個具有最低優先級的線程。所有線程都不會一次進入等待狀態。即使我有一個公平的分享政策,那麼我的線程將獲得更少的時間份額 – Yogi

+0

@Yogi:是的,該線程將獲得較少的時間份額。通過動態優先級(「公平調度程序」),它將得到適當的更低分數。有了「實時」的優先級,它將一無所獲。這就是這些系統的定義。各種操作系統有一個或另一個,或兩者兼而有之,「公平」在每個操作系統中都有不同的作用,並且或多或少是公平的 –