Избягване на натовареното чакане в тази ситуация

Имам процес, който използва различни нишки за създаване на различни видове задачи.

Една такава нишка трябва да изпраща насочени известия по неблокиращ начин (така че ще използвам libcurl поради мулти интерфейса и поддръжката на SSL). Главната нишка трябва да предаде заданието на работника и си помислих да използвам опашка за съобщения на apache apr за предаване на съобщения. Тъй като в същата нишка трябва да проверя за входящи съобщения и за наличността на дръжките за къдрене, мисля, че ще използвам нещо подобно:

while (1)
{
    while (apr_queue_try_pop(queue, &msg) == APR_SUCCESS)
    {
        // do something with the message
    }

    // perform a select or poll in the curl multi handle
    // treat the handles that are available for reads/writes
}

във функцията за стартиране на нишка.

Това е малко натоварено чакане, има ли по-добро решение?

Използване на C99 и Linux x86_64.


person Victor Dodon    schedule 24.09.2013    source източник


Отговори (1)


Трудно е да се отговори точно на въпроса ви, просто няма достатъчно информация. Но ако кодът, който показвате, е работният код, т.е. стартиран в нишка, и необходимостта от изпращане на известия е честа, тогава не виждам причина това да не работи. Що се отнася до вашия въпрос Това е някак натоварено чакане, има ли по-добро решение? Обикновено правя нещо, за да накарам нишката да остане неактивна, след като задачата, за която отговаря, е завършена, като например използвам сън (1000). Останалата част от времевия отрязък на нишката не се използва за зацикляне. Като този:

while (1)
{
    while (apr_queue_try_pop(queue, &msg) == APR_SUCCESS)
    {
        // do something with the message
    }

    // perform a select or poll in the curl multi handle
    // treat the handles that are available for reads/writes
    Sleep(1000);
}
person ryyker    schedule 24.09.2013