這是一個面試問題,這意味着這可以在短時間內完成。 我以爲在這裏問,因爲我不知道如果我被問到該怎麼做。設計並編寫可以執行非同步或同步任務的任務調度程序
「進行設計和編碼任務調度,可以採取不同步或同步任務」
請用你的想象力/假設,並分享您的想法和意見。
這是一個面試問題,這意味着這可以在短時間內完成。 我以爲在這裏問,因爲我不知道如果我被問到該怎麼做。設計並編寫可以執行非同步或同步任務的任務調度程序
「進行設計和編碼任務調度,可以採取不同步或同步任務」
請用你的想象力/假設,並分享您的想法和意見。
這個問題是刻意模糊,它想證明你是多麼優秀的設計和解決問題,你做出什麼樣的假設,你怎麼證明他們等不存在單一的,很好的答案。這是解決問題的問題。
話雖這麼說這裏是我的看法:因爲它似乎是問題的好抽象
我的調度可以採取任意Runnable
或Callable<V>
,我將實現ScheduledExecutorService
。我儘可能多地使用標準類,以使API簡單易用。
通過unsychronized和同步我的理解:安全的同時運行那些需要排它鎖。即調度程序不允許同時運行兩個同步的任務。
將使用標記接口進行同步,並且unsychronized任務之間的區別。註釋也很好,但在運行時難以提取。
我不會給你完整的實現,但它可能會包裝一些標準的ScheduledExecutorService
與同步任務的額外同步。我認爲ConcurrentMap<Class, Semaphore>
會做。運行前任務標記爲同步我確定沒有其他同步任務同時運行。我阻止並等待或拒絕(這可以是可配置的)。
終於! :) 感謝您提供非常豐富的答案。 – Watt
我會使用一個ExecutorService,因爲它內置了大部分你想要的東西。它不關心這些任務是否使用同步。
你說的同步任務意思呢?從CPU調度程序的角度來看,提出這樣的問題是沒有意義的,因爲這些問題是更高級別的同步原語(互斥鎖,條件變量,屏障等)。 –
在Google採訪過程中提出了這個問題http://www.glassdoor.com /Interview/Design-and-code-a-task-scheduler-that-can-take-unsynchronized-or-synchronized-tasks-QTN_410705.htm – Watt
技術上任何計劃可以同時處理,它是由編寫任務處理的人更高層次的原語(除非你需要實時或類似的東西)。 –