[英]c++: PThread Scheduling vs. Windows Thread
我對Windows線程有一些經驗,正在研究pthreads。 我對pthread調度有疑問。 在Windows上,您可以設置Process-Priority,而在Process中,可以設置Process-Priority。 Windows Scheduler始終執行具有最高進程優先級的進程,並且在進程中以循環方式執行線程。
現在到pthread中,您可以通過sched_setscheduler設置調度程序策略,並設置實時修改的優先級。 一切,萊特到目前為止?
問題:
1)如何在不同的進程上調度pthread?
2)實時線程是否在優先級較低的線程之前執行,或者是否有循環機制?
3)我如何才能獲得盡可能多的實時行為(輸入/輸出信號的費率),我可以得到多少?
重要的是要意識到,POSIX線程(pthreads)是在一個標准中指定的,該標准對實現施加了某些最低要求,但同時也給了它們很大的回旋余地。
pthreads具有線程調度爭用范圍的概念。 pthreads實現必須至少支持PTHREAD_SCOPE_SYSTEM
和PTHREAD_SCOPE_PROCESS
調度爭用范圍之一。
如果在PTHREAD_SCOPE_SYSTEM
爭用范圍內調度了線程,則在系統上使用PTHREAD_SCOPE_SYSTEM
與其他所有進程和線程進行競爭,以平等地競爭該線程。
如果一個線程是在PTHREAD_SCOPE_PROCESS
爭用范圍內調度的,則它僅在同一進程中也使用PTHREAD_SCOPE_PROCESS
與其他線程直接競爭。 POSIX未指定如何相對於其他進程/線程調度該組線程,但是通常在同一進程中使用PTHREAD_SCOPE_PROCESS
每組線程都被視為單個PTHREAD_SCOPE_SYSTEM
實體。
實現僅支持其中之一是很常見的-例如,Linux僅支持PTHREAD_SCOPE_SYSTEM
調度爭用范圍。
在pthreads下,可運行的優先級較高的線程始終優先於優先級較低的線程執行。 對於具有相同優先級的線程,如果一個線程正在使用SCHED_FIFO
調度策略,則它將繼續運行直到阻塞或讓步;否則,它將繼續運行。 如果它正在使用SCHED_RR
調度策略,則在用完其時間量后也會被搶占。
我認為POSIX不會對實時性能施加任何限制-畢竟,實時延遲受底層硬件的強烈影響。 除了設置實時調度策略( SCHED_FIFO
或SCHED_RR
)之外,還可以通過使用mlockall(MCL_CURRENT | MCL_FUTURE);
鎖定進程內存來獲得更多確定性延遲mlockall(MCL_CURRENT | MCL_FUTURE);
並在您需要的內存中進行預故障處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.