Я работаю над критичной к производительности системой, в которой много журналов. Я планирую сделать мои основные вычисления в потоке, который привязан к одному ядру, и регистрирует в другом потоке, который придерживается другого ядра. Как мне добиться этого в pthread_setaffinity_np ()?
Я полагаю, что мой код будет выглядеть как
void log_something(const string& st) {
pthread_setaffinity_np(pthread_self(),sizeof(cpuset),&cpuset);
//LOG string st;
}
int main() {
while (true) {
// do some computation
log_something(something)
}
}
Мой вопрос: когда я вызываю pthread_setaffinity_np () в log_something (), будет ли он выполнять регистрацию в указанном мной процессоре, а во время ведения журнала возвращаться к циклу while из main () и продолжать вычисление?
Или он переключит всю программу на этот набор процессоров и вернется к основному методу только после регистрации?
Спасибо!
[ИЗМЕНЕНО] В качестве примера я использую ведение журнала, но моя практическая проблема более сложна, чем эта. Например, мне, возможно, придется обновлять динамический параметр каждую минуту, и пока я обновляю параметр, я все еще хочу продолжить вычисления в методе main () на основе старого параметра (то есть я просто не могу остановить свой основной расчет для обновления параметров). Поэтому процесс обновления параметров, возможно, придется перенести в другой поток, который придерживается другого ядра. Поэтому я ищу общее решение для разделения вычислений, а не просто эффективный регистратор.
Извините за путаницу.