簡體   English   中英

C ++:PThread計划與Windows線程

[英]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_SYSTEMPTHREAD_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_FIFOSCHED_RR )之外,還可以通過使用mlockall(MCL_CURRENT | MCL_FUTURE);鎖定進程內存來獲得更多確定性延遲mlockall(MCL_CURRENT | MCL_FUTURE); 並在您需要的內存中進行預故障處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM