這裏有一個場景:我有一個父進程產生了幾個子進程。現在每個子進程必須允許運行兩秒鐘(理想情況下cpu時間),然後父進程讓孩子進入睡眠狀態或做一些工作。這個循環繼續。還有一些子流程可能會在兩者之間終止。將要產生的子過程是由一些不可信任的人寫的代碼。 (這個問題提醒輪詢調度ME)如何安排子流程?
我的解決方案和研究:
明顯的解決辦法:把父兩秒鐘睡覺,然後醒來並控制孩子。在這裏,我們花時間去了解每個進程可能得不到公平的兩秒的執行時間。
解決方法二:使用prlimit()與RLIMIT_CPU,並設置一個大hardlimit和軟限制兩秒開始。隨後軟限制可能會上升兩秒。然後子進程得到一個SIGXCPU信號。
不同的信號(實時信號)可以被分配給每個處理(命中的33更高的極限)。現在收到SIGXCPU信號後,必須使用os.kill()將指定的信號發送給父節點。這裏的問題是子進程必須自發地將信號發送給父進程。通過延遲發送信號,子進程可能會獲得額外的時間。
解決方案三:再使用setitimer()與ITIMER_VIRTUAL從子進程。 SIGVTALRM信號發送給子進程。它必須將不同的信號(如上所述)轉發給父進程。該解決方案與以前的解決方案具有相同的問題。
所有三種解決方案都是災難。我正在尋找更好的解決方案。一些最簡單的代碼解釋會非常有幫助。
我孩子打印並退出,然後父母將無限期地等待!所以測量CPU時間是不好的。 –
我得出的結論是,使用cpu時間不是明智的,至於隔離時間,我認爲問題仍然存在。 –