Linux-Kernel
是否建議在創建執行緒期間在 Linux FIFO 中使用 param.sched_priority?
在我的嵌入式設備中,我使用我們使用的協議吸收了奇怪的行為,有時使用 FIFO 通過串列設備發送數據需要一段時間。
我懷疑 Linux 不是實時作業系統,為什麼他們有這樣的實時模擬功能,例如pthread_setschedparam?並且在隊列中具有這樣的優先級會導致另一個程序餓死,因為它需要花費大量時間來檢測從設備。
我只想知道是否建議使用 param.sched_priority = 40; 在 Linux 中?我試圖調整這個參數,但這個問題很難在現場重現。
這是程式碼
if (1) { int policy; int r; struct sched_param param; policy = SCHED_FIFO; param.sched_priority = 40; r = pthread_setschedparam(cc_state->ser_thread, policy, ¶m); printf("%s: pthread_setschedparam %d", __func__, r); }
Linux實時不是仿真,有系統呼叫影響調度。見
man sched(7)
。從您的問題中不清楚您要做什麼以及您的確切問題是什麼。的值sched_priority
僅與其他執行緒的優先級相關。例如,如果只有一個執行緒的優先級 > 0,那麼優先級是 1 還是 40 都沒有關係;較高的值不會給執行緒帶來額外的“提升”。您必須確定執行緒所需的相對優先級並相應地為其分配優先級值。請注意,沒有與
SCHED_FIFO
執行緒相關的時間片。執行緒一直執行直到發生以下情況之一:SCHED_FIFO
執行緒因為等待 I/O 而被阻塞,更高優先級的執行緒準備好執行,或者執行緒自願讓出處理器。如果您有多個具有相同優先級的執行緒,則必須考慮到這一點,否則一個執行緒可能會佔用其他執行緒的 CPU。在多處理器機器上,多個執行緒當然可以在各自的 CPU 上同時執行。