Вопрос

Некоторое время назад при использовании Solaris у меня возникла проблема, заключавшаяся в том, что я хотел ограничить количество процессоров, которые могла видеть Java (это было возвращено Runtime.getRuntime().availableProcessors().Я думал, что у меня это есть, и мне дали кое-какую информацию для Linux, и я принял ее на веру.Мне сказали , что с помощью taskset ограничило бы количество процессоров, которые будет использовать java (что верно, так и есть), но это не меняет того, что возвращается availableProcessors().

Я довольно долго искал, чтобы найти какой-то способ изменить это availableProcessors() возвращаемое значение, и мне ничего не удалось найти.Кто-нибудь знает способ ограничить это или почему taskset -c 0,1 java -cp ./ Test не сработало бы.

Test.java

public class Test {
  public static void main(String args[]) {
    System.out.println(Runtime.getRuntime().availableProcessors());
  }
}

Ваше здоровье

Это было полезно?

Решение

Неудивительно, что taskset здесь не будет работать, поскольку это команда, которая задает параметры планировщика, тогда как у available Processors() не было бы никаких причин запрашивать планировщик.

Обратите внимание, что в вашем примере taskset не просто ограничивает вас двумя процессорами;это ограничивает вас двумя конкретными процессорами (0 и 1).

Интересно, можете ли вы использовать сквозную обработку (AOP) или генерацию байтового кода для переноса вызова availableProcessors()?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top