Mam aplikację GUI, która używa pthreads do wykonania ciężkiego przetwarzania w tle.Nić w tle podczas używania pthreads (nice, priority)
Podczas przetwarzania w tle GUI jest bardzo nieczytelny i myślę, że dzieje się tak dlatego, że jest on pozbawiony czasu procesora przez wątki w tle.
W systemie Windows można :: SetThreadPriority (hThread, THREAD_PRIORITY_BELOW_NORMAL) na wątkach tła i wszystko jest dobrze.
Jednak w Linuksie używam pthreads i nie mogę znaleźć dobrej alternatywy.
Rozważałem już;
- :: sched_setscheduler (SCHED_FIFO) albo :: sched_setscheduler (SCHED_RR) - to nie jest opłacalne, ponieważ wymaga root (nie miły dla mojego GUI aplikacji) - również to uczyni wątku GUI mają zbyt dużo CPU ; Chcę tylko, aby GUI miało priorytet nad wątkami tła.
- :: podczas korzystania coś innego niż SCHED_FIFO lub SCHED_RR, który nie jest obsługiwany (:: sched_get_priority_min (SCHED_OTHER) i :: sched_get_priority_max (SCHED_OTHER) zwracają 0)
- mieć wiele procesów i używać :: ładny pthread_setschedparam ale. Istnieje zbyt wiele sprzężeń pomiędzy GUI i wątkami tła, aby uczynić to opłacalnym (a przeniesienie tak dużej ilości kodu do tego projektu jest znaczną ilością pracy).
- Użyj :: setpriority, aby ponownie ładować wątki tła. To działa - ale jest bezpośrednio przed tym, co mówi dokumentacja: PThreads documentation (a więc potencjalnie mogłyby być „stałe” całego systemu w późniejszym terminie)
Jestem przekonany, że jest to dość powszechny wzorzec dla aplikacji GUI więc co przegapiłem?
Marcus.
EDIT: Dodano :: setpriority do listy opcji (dzięki ZalewaPL)
"* ... zbyt wiele sprzężeń między GUI a wątkami tła ... *" Zacznę od nowa, pomyśl o projekcie, sry. – alk
Nie jestem pewien, czy to jest pomocne - nie ma powodu, aby nie mieć dużego ruchu między interfejsem a wątkiem w tle, a całkiem rozsądne jest, aby nie przenosić tego do komunikacji między procesami. –