Как хорошие приоритеты и политики планировщика связаны с идентификаторами процессов (потоков?) В Linux?

Я изучаю, как сделать так, чтобы мой рабочий стол Linux оставался гладким и интерактивным, пока я выполняю задачи с интенсивным использованием ЦП в фоновом режиме. Вот пример программы (написанной на Java), которую я использую для имитации загрузки процессора:

public class Spinner {
    public static void main(String[] args)
    {
        for (int i = 0; i < 100; i++) {
            (new Thread(new Runnable() {
                    public void run() {
                        while (true);
                    }
            })).start();
        }
    }
}

Когда я запускаю ее в командной строке, я замечаю, что интерактивность моих настольных приложений (например, текстового редактора) значительно падает. У меня двухъядерный компьютер, поэтому меня это не удивляет.

Чтобы бороться с этим, моей первой мыслью было nice процесс с помощью renice -p 20 . Однако я обнаружил, что это не сильно влияет. Вместо этого мне нужно перерисовать все дочерние процессы с помощью чего-то вроде ls / proc / / task | xargs renice 20 -p - , что дает гораздо больший эффект.

Меня это очень смущает, так как я не ожидал, что потоки будут иметь собственные идентификаторы процесса. Даже если бы они это сделали, я ожидал, что renice будет действовать в отношении всего процесса, а не только его основного потока.

Есть ли у кого-нибудь четкое представление о том, что здесь происходит? Похоже, что каждый поток на самом деле является отдельным процессом (по крайней мере, у него есть действительный PID). Я знал, что исторически Linux работал так, но я полагал, что NPTL исправил это много лет назад.

Я тестирую RHEL 5.4 (ядро Linux 2.6.18).

(Кстати, я замечаю тот же эффект, если я попробуйте использовать sched_setscheduler (, SCHED_BATCH, ..) , чтобы попытаться решить эту проблему интерактивности. Т.е. мне нужно сделать этот вызов для всех «дочерних» процессов, которые я вижу в / proc / / task , недостаточно выполнить его один раз на pid основной программы.)

6
задан Mat 17 May 2012 в 20:59
поделиться