Die aktuelle Antwort von levif (Empfehlung SCHED_BATCH) ist nicht korrekt für die aktuelle NPTL-Thread-Implementierung unter Linux (Sie können überprüfen, welche Implementierung Ihr Kernel hat, indem Sie 'getconf GNU_LIBPTHREAD_VERSION' ausführen).
Im heutigen Kernel erlauben nur die Real Time Scheduling-Richtlinien die Einstellung von sched_priority - es ist immer 0 für die Nicht-RT-Richtlinien (SCHED_OTHER, SCHED_BATCH und SCHED_IDLE). Ihre einzige Wahl für die Nicht-RT-Richtlinien besteht darin, 'nette' Werte zu setzen, z. von setpriority(). Es gibt keine guten Spezifikationen für das genaue Verhalten, die man erwarten kann, wenn man 'nett' setzt, und zumindest theoretisch könnte es von Kernel-Version zu Kernel-Version variieren. Für aktuelle Linux-Kernel hat 'nett' einen sehr starken Effekt ähnlich der Priorität, so dass Sie es ziemlich synonym verwenden können. Um zu erhöhen, wie oft Ihr Thread geplant ist, möchten Sie unter Ihren 'netten' Wert senken. Dies erfordert die CAP_SYS_NICE-Fähigkeit (normalerweise root, obwohl nicht unbedingt, siehe und http://man7.org/linux/man-pages/man3/cap_set_proc.3.html).
In der Tat SCHED_BATCH für den gegenüber Fall entworfen, was die Fragesteller angefordert: es für CPU-intensive ausgelegt ist, lange laufende Aufträge, die mit niedrigeren Priorität leben kann. Es weist den Scheduler an, die Weckpriorität für die Threads geringfügig zu strafen.
Auch um einen der früheren Kommentare zu beantworten (Ich habe noch nicht genügend Ruf, um eine Antwort zu kommentieren - einige Upvotes für diese Antwort würden helfen :)). Ja, die schlechte Nachricht ist, dass die POSIX.1-Spezifikation besagt, dass "nett" Prozesse und nicht einzelne Threads betrifft. Die gute Nachricht ist, dass die Linux-Thread-Implementierungen (sowohl NPTL als auch die originalen Linux-Threads) die Spezifikation durchbrechen und es erlauben, einzelne Threads zu beeinflussen. Ich finde es amüsant, dass dies oft im Abschnitt "BUGS" der man-Seiten aufgerufen wird. Ich würde sagen, der Fehler war in der POSIX.1-Spezifikation, die dieses Verhalten erlaubt haben sollte, nicht in den Implementierungen, die gezwungen waren, es trotz der Spezifikation bereitzustellen, und dies bewusst und absichtlich getan hat. Mit anderen Worten - kein Fehler.
Das meiste ist detailliert auf der Sched (7) man-Seite (die aus irgendeinem Grund nicht auf meinem Fedora 20-System geliefert wird): http://man7.org/linux/man-pages/man7/sched.7.html
Wenn Sie wirklich beeinflussen wollte sched_priority Sie auf das aussehen könnte Echtzeit-Richtlinien wie SCHED_RR).
re: 'SCHED_OTHER', das ist nicht ganz richtig, da schönes Niveau noch wirksam wird. – Hasturkun
@Hasturkun: Sie haben recht, es ist die * nette * zwicken, als ein Tipp für den Scheduler (keine Scheduler-Priorität!). Danke für die Richtigkeit! – levif
Sie brauchen nicht wirklich Root-Rechte, müssen nur die rlimits gesetzt haben, so dass das maximale prio, das Sie einstellen dürfen,> 0 ist – Spudd86