2013-02-04 21 views
3

這是一個面試問題,這意味着這可以在短時間內完成。 我以爲在這裏問,因爲我不知道如果我被問到該怎麼做。設計並編寫可以執行非同步或同步任務的任務調度程序

「進行設計和編碼任務調度,可以採取不同步或同步任務」

請用你的想象力/假設,並分享您的想法和意見。

+1

你說的同步任務意思呢?從CPU調度程序的角度來看,提出這樣的問題是沒有意義的,因爲這些問題是更高級別的同步原語(互斥鎖,條件變量,屏障等)。 –

+0

在Google採訪過程中提出了這個問題http://www.glassdoor.com /Interview/Design-and-code-a-task-scheduler-that-c​​an-take-unsynchronized-or-synchronized-tasks-QTN_410705.htm – Watt

+0

技術上任何計劃可以同時處理,它是由編寫任務處理的人更高層次的原語(除非你需要實時或類似的東西)。 –

回答

6

這個問題是刻意模糊,它想證明你是多麼優秀的設計和解決問題,你做出什麼樣的假設,你怎麼證明他們等不存在單一的,很好的答案。這是解決問題的問題。

話雖這麼說這裏是我的看法:因爲它似乎是問題的好抽象

  1. 我的調度可以採取任意RunnableCallable<V>,我將實現ScheduledExecutorService。我儘可能多地使用標準類,以使API簡單易用。

  2. 通過unsychronized同步我的理解:安全的同時運行那些需要排它鎖。即調度程序不允許同時運行兩個同步的任務。

  3. 將使用標記接口進行同步,並且unsychronized任務之間的區別。註釋也很好,但在運行時難以提取。

  4. 我不會給你完整的實現,但它可能會包裝一些標準的ScheduledExecutorService與同步任務的額外同步。我認爲ConcurrentMap<Class, Semaphore>會做。運行前任務標記爲同步我確定沒有其他同步任務同時運行。我阻止並等待或拒絕(這可以是可配置的)。

+0

終於! :) 感謝您提供非常豐富的答案。 – Watt

0

我會使用一個ExecutorService,因爲它內置了大部分你想要的東西。它不關心這些任務是否使用同步。