Больше потоков или пустых циклов? - PullRequest
0 голосов
/ 10 февраля 2012

На Яве, что считается более обременительным? Реализация другого потока и использование уведомления об ожидании или включение цикла for / while в текущем потоке, подобном этому>

while(running){

 //do stuff

   if(skip == 20){

      //do more stuff
      skip = 0;

   }else{
      skip++;
   }
   }

Полагаю, последнее не считается лучшей практикой, но я не хочу, чтобы тратить слишком много памяти на дополнительный поток, который очень мало.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

(перенесено в ответ)

Если вы где-то спите или это не бесконечный цикл ... потоки предназначены для распараллеливания работы;Например, вы хотите сделать две вещи одновременно на двух разных ядрах.Если вам это не нужно или это не относится к вашей проблеме, вы не используете дополнительные темы.

Если у вас нет сна или другой операции блокировки, и это бесконечный цикл, вы только что создали приложение для подогрева рук (или приложение для разряда аккумулятора ...)

0 голосов
/ 10 февраля 2012

У меня нет конкретного ответа, но я хотел бы предложить принцип, которому нужно следовать. Каждая итерация вашего цикла должна включать в себя операцию блокировки, а операция блокировки должна иметь тайм-аут, чтобы он не блокировался вечно. Если у вас нет какой-либо операции блокировки, вы можете использовать режим сна (или, что лучше, дождитесь события с таймаутом, см. Ниже).

Если вы хотите повысить ответственность за разрыв основного цикла, используйте событие вместо флага bool для управления основным циклом. Таким образом, когда событие сигнализируется, цикл немедленно прерывается. В псевдокоде:

while(!wait_for(cancelLoopEvent, immediate))
{
    // do stuff

    if(time_to_work())
    {
        // do the work
    }
    else
    {
        wait_for(cancelLoopEvent, loop_timeout)
    }
}
0 голосов
/ 10 февраля 2012

Если это поток, который вам нужен, то есть «вещи» и «больше вещей» не должны работать параллельно, тогда цикл счетчика / пропуска в порядке - не идите к тому, чтобы сигнализировать другим потокам только для запуска «больше вещей» 'после каждых 20' ​​вещей '.

...