2012-12-13 60 views
0

在Java中:是否可以阻止調度程序(Ubuntu)在線程代碼的特定部分上執行上下文切換。阻止調度程序在Java中執行上下文切換

如果是這樣,怎麼樣?

+0

不是。如果代碼沒有完成呢? –

+2

沒有。很確定這在任何通用操作系統中都是不可能的。你爲什麼想要這個? – jtahlborn

+0

你可能會屈服,並希望。 –

回答

2

你應該去一個實時線程:

http://jrate.sourceforge.net/api/stable/javax/realtime/RealtimeThread.html

和其優先級設置爲最高級別:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#setPriority%28int%29

這樣,一旦實時線程啓動時,它將不再釋放處理器。

更多的是,應該要求調度程序像(實時)FIFO調度程序一樣工作。

你有一個setScheduler()方法。

+1

+1這可以工作,除非你需要一個支持這個的JVM,而且我只知道一個Java RTS,它很昂貴,而且現在不能很好地維護,因爲它是沒有被廣泛使用。 –

2

我所做的避免上下文切換是使用線程親和性,繁忙的等待和隔離cpus(如果操作系統支持的話),Java不支持這些,但藉助一個小的JNI/JNA它可以完成。

Thread Affinity library for Java

注:有其無法避免,但通常不會有太大的影響NMI中斷。