Ich habe etwas Erfahrung mit Windows-Threads undIch suche in Pthreads. Ich habe eine Frage zur Pthread-Planung. In Windows können Sie die Prozesspriorität einstellen, und innerhalb eines Prozesses können Sie die Prozesspriorität einstellen. Der Windows-Scheduler führt immer den Prozess mit der höchsten Prozesspriorität aus, und im Prozess die Threads auf einem Round-Robin.
Nun zu den Pthreads können Sie die Scheduler-Policy über sched_setscheduler und die Priorität für Echtzeitmodi festlegen. Alles, bis jetzt?
FRAGEN:
1) Wie werden pthreads für verschiedene Prozesse geplant?
2) Werden Echtzeit-Threads vor Threads mit niedrigerer Priorität ausgeführt, oder gibt es eine Round-Robin?
3) Wie kann ich so viel Echtzeitverhalten (zB für E / A-Signale) wie möglich bekommen und wie viel kann ich bekommen?
Antworten:
1 für die Antwort № 1Es ist wichtig zu wissen, dass POSIX-Threads (pthreads) in einem Standard spezifiziert sind, der bestimmte Mindestanforderungen an Implementierungen auferlegt, aber auch erheblichen Spielraum lässt.
Pthreads hat ein Konzept von Thread Scheduling-Konfliktbereich. Pthreads-Implementierungen müssen mindestens eine von unterstützen PTHREAD_SCOPE_SYSTEM
und PTHREAD_SCOPE_PROCESS
Planung von Konfliktbereichen.
Wenn ein Thread unter geplant ist PTHREAD_SCOPE_SYSTEM
konkurrenzfähig, konkurriert es gleichermaßen mit allen anderen Prozessen und Threads mit PTHREAD_SCOPE_SYSTEM
auf dem System.
Wenn ein Thread unter geplant ist PTHREAD_SCOPE_PROCESS
Konkurrenzbereich konkurriert es nur direkt mit anderen Threads, die ebenfalls verwendet werden PTHREAD_SCOPE_PROCESS
im gleichen Prozess. Wie diese Gruppe von Threads dann in Bezug auf andere Prozesse / Threads geplant wird, wird von POSIX nicht angegeben PTHREAD_SCOPE_PROCESS
im selben Prozess wird als Single behandelt PTHREAD_SCOPE_SYSTEM
Entität.
Es ist üblich, dass Implementierungen nur eine davon unterstützen. Beispielsweise unterstützt Linux nur die PTHREAD_SCOPE_SYSTEM
Planungskonfliktumfang.
Unter Pthreads werden lauffähige Threads mit höherer Priorität bevorzugt vor Threads mit niedrigerer Priorität ausgeführt. Bei Threads auf derselben Prioritätsstufe, wenn ein Thread den SCHED_FIFO
Planungsrichtlinie wird dann so lange ausgeführt, bis sie blockiert oder nachgibt; wenn es das verwendet SCHED_RR
Planungsrichtlinien dann wird es auch nach dem Verbrauch seines Zeitquantums vorweggenommen.
Ich glaube nicht, dass POSIX Einschränkungen auferlegtEchtzeitperformance - Die Latenzzeit in Echtzeit wird von der zugrunde liegenden Hardware stark beeinflusst. Neben der Festlegung einer Echtzeit-Planungsrichtlinie (SCHED_FIFO
oder SCHED_RR
) können Sie auch eine deterministischere Latenzzeit erzielen, indem Sie Ihren Prozessspeicher mit sperren mlockall(MCL_CURRENT | MCL_FUTURE);
und Vorab-Fehler in dem Speicher, den Sie benötigen.