/ / c ++: PThread-Planung vs. Windows-Thread

C ++: PThread Scheduling vs. Windows Thread - C ++, Multithreading, Pthreads

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 № 1

Es 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.