Java-процессы и потоки для соответствия потокам

Недавно я написал код[1][2], который пытался использовать JNA для выполнения вызовов sched_setaffinity в попытке установить привязку процесса к определенному ядру. Первым аргументом функции sched_setaffinity является идентификатор процесса.

Вызов функции с идентификатором pid как 0 (относится к самому процессу) работает нормально. Однако я хотел бы иметь возможность устанавливать сходство на основе идентификатора потока, а не процесса. Могу ли я это сделать?

  1. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ctest.c
  2. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ThreadAffinity.java

person Community    schedule 17.11.2013    source источник


Ответы (1)


Существует функция под названием pthread_setaffinity_np, которая может установить маску соответствия ЦП. потока потока к набору ЦП, на который указывает cpuset.

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core_id, &cpuset);

pthread_t current_thread = pthread_self();    
pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);

Этот фрагмент кода может установить поток для ядра (представленного core_id).

Насколько я знаю, поток Java не всегда соответствует потоку в ОС. Так что я не совсем уверен, сможет ли вам помочь этот кусок нативного кода.

person StarPinkER    schedule 17.11.2013