C linux pthread tråd prioritet

Mit program har en baggrund tråd, der fylder og swaps tilbage buffer af en dobbelt buffer gennemførelse.
Den røde tråd bruger foran buffer til at sende data. Problemet er, at den røde tråd bliver mere sagsbehandlingstiden i gennemsnit, når jeg køre programmet. Jeg vil have den modsatte adfærd, da fylde tilbage buffer er en mere tidskrævende proces, så behandling og sende data til klienten.

Hvordan kan jeg opnå dette med C POSIX pthreads på Linux?

Jeg fjernede hilsen fra spørgsmål for at gøre mere plads i den pågældende visning fra din oversigt.

OriginalForfatteren eat_a_lemon | 2011-03-21

4 svar

  1. 6

    Min erfaring er, at hvis, i mangel af prioritering din røde tråd er at få mere CPU-så betyder det en af to ting:

    1. det, der faktisk er behov for den ekstra tid, i modsætning til din forventning, eller

    2. baggrunden tråd er ved at blive udsultet, måske på grund af lock påstand

    At ændre prioriteter, der ikke vil løse nogen af dem.

    Jeg troede kontekst skift mellem tråde var vilkårlig, undtagen med hensyn til dens prioritet vægt. Jeg ved, det ikke er en lås problem, da jeg kan se det skifte, når det er vel at…men det betyder ikke bo på baggrund tråd så lang tid som den røde tråd….eller det betyder ikke bo på baggrund tråd så meget som jeg gerne ville have det til at heh.
    Ja, det er ikke et højt prioriteret emne. Jeg havde andre problemer med at gå på. Jeg brugte et værktøj kaldet valgrind for tråd debugging og memory leak detection. (valgrind.org) Det er et fantastisk værktøj.
    Dette er ikke et svar. Der er tilfælde, hvor du ønsker at reducere prioritet i en tråd for at forhindre sult af en anden. For eksempel, hvis du bruger GPU ‘ en beregne, og har CPU beregne, du ønsker CPU beregne tråd til at have lidt lavere prioritet for at øge GPU udnyttelse.

    OriginalForfatteren Alnitak

  2. 3

    have et kig på pthread_setschedparam() –> http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setschedparam.3.html

    pthread_setschedparam(pthread_t thread, int policy,
                             const struct sched_param *param);

    Du kan indstille prioriteten i sched_priority felt af sched_param.

    Jeg har et kig på det. Det er helt uklart, om den værdi, som du bruger til prioritering. Dette svar hjælper, men det mangler den del, hvor du reducere prioritet. Hvordan kan jeg reducere den prioritet i en tråd? Hvad er den “normale” prioritet? 0? 20? Hvad er “lavere” prioritet? -10? 10?

    OriginalForfatteren cordellcp3

  3. 1

    Bruge pthread_setschedprio(pthread_t thread, int priority). Men som i andre tilfælde (setschedparam, eller når du bruger pthread_attr_t) din proces skal være i gang under root, hvis du ønsker at ændre prioriteter (som godt værktøj).

    OriginalForfatteren maverik

  4. 1

    Du skal have et kig på pthread_attr_t struct. Det gik som en parameter til pthread_create funktion. Det bruges til at ændre tråd attributter og kan hjælpe dig med at løse dit problem.

    Hvis du ikke kan løse det, vil du nødt til at bruge en mutex at forhindre, at din røde tråd for at få adgang til din buffer, før din anden tråd swaps det.

    OriginalForfatteren Opera

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *