[lkml]   [2008]   [Oct]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: sched_yield() options
    On 10/20/2008 06:08 PM, wrote:
    > in the case I'm looking at there are two (or more) threads running with
    > one message queue in the center.
    > 'input threads' are grabbing the lock to add messages to the queue
    > 'output threads' are grabbing the lock to remove messages from the queue
    > the programmer is doing a pthread_yield() after each message is
    > processed in an attempt to help fairness (he initially added it in when
    > he started seeing starvation on single-core systems)
    > what should he be doing instead?

    If you're seeing starvation, to me that's a good indicator that the
    granularity of queue items are too small... probably there'd be an overall
    benefit of grabbing more things at once from the queue.

    To make a silly metaphor out of it - imagine you've got a bunch of office
    interns (threads) whose jobs are to fill out PQ9-12b forms. An intern has
    to wait in line before they can get to the desk where the secretary is
    handing out the forms to be filled out, one by one. An intern can fill out
    the form just as fast as the secretary hands it to them; if they do so,
    then one intern ends up doing all the work while the others just wait in line.

    But in order to make everyone equally busy (by injecting sched_yield())
    you're making the interns take the paper, walk back to their desk, fill it
    out, and then get back in line, which takes somewhat more time overall,
    despite making the interns look much busier. A better solution would be to
    give each intern a big stack of forms so that they spend a greater
    proportion of time filling them out rather than waiting in line; perhaps if
    each intern is kept busy enough, the line will always be empty, which would
    be the best situation of all.

    - DML

     \ /
      Last update: 2008-10-21 02:21    [W:0.022 / U:22.768 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site