Página 1 de 1

Threads matando a CPU

MensagemEnviado: 12 Fev 2018 13:30
por denis
Pessoal,

Esta aplicação estava consumindo quase 300% da CPU rodando 3 threads numa Raspberry Pi 3.

Código: Selecionar todos
pthread_t         tid[NUM_THREADS];

int main(int argc, char **argv)
{
   (void)pthread_create(&(tid[0]),   NULL,   &CheckPowerAC      ,   NULL);

   while (1)
   {

   }

   return 0;
}

void *CheckPowerAC(void *arg)
{
   static _u64Timeout_t   Timeout = 0;
   
   while (1)
   {
      if (GetCurrTime() >= Timeout)
      {
         /* ... */
      }
   }

   return NULL;
}


Apenas para testar troquei o if por um sleep() assim:

Código: Selecionar todos
   while (1)
   {
      /* ... */
      sleep(10);
   }


O uso da CPU caiu absurdamente.
Eu devo usar sleep() sempre quando uso threads?
Ou seria uma característica da Raspberry / SO ?

abs,

Re: Threads matando a CPU

MensagemEnviado: 12 Fev 2018 13:46
por Red Neck Guy
Com o sleep, o scheduler do SO deixa a tua thread bloqueada por 10 ticks.
Sem o sleep, o scheduler precisa colocá-la pra rodar a cada rodada de escalonamento.

Re: Threads matando a CPU

MensagemEnviado: 12 Fev 2018 14:33
por denis
Aquino escreveu:Com o sleep, o scheduler do SO deixa a tua thread bloqueada por 10 ticks.
Sem o sleep, o scheduler precisa colocá-la pra rodar a cada rodada de escalonamento.


Pensando melhor, acho que é burrice deixar a CPU checando um timer frequentemente sabendo que o sleep resolve isso de forma mais elegante.

Eu só não esperava que um simples if rodando em loop numa thread faria um estrago deste.
Só consegui notar este problema quando a CPU estava nos 80°C.

Re: Threads matando a CPU

MensagemEnviado: 12 Fev 2018 14:34
por andre_luis
Talvez o recurso da Thread não esteja sendo bem aproveitado no contexto de um sistema embarcado. Há mais de 10 anos atrás quando mexi com o BlackFin da Analog Devices, utilizava um recurso do RTOS deles para sair antecipadamente da thread quando a execução da rotina de interesse terminasse. A utilização de um loop "infinito" soa como um desperdício de processamento.

Re: Threads matando a CPU

MensagemEnviado: 16 Mar 2018 22:20
por Vonnilmam
Uma pergunta de amador..

Vocês estão utilizando que tipo de compilador "basic" ou "C"?

Re: Threads matando a CPU

MensagemEnviado: 16 Mar 2018 23:59
por Red Neck Guy
Basicamente a conversa é sobre C.
Mas detalhe, o conceito do computação concorrente não tem relação direta com a linguagem utilizada. O conceito de escalonamento de tarefas é um conceito de computação que independe da linguagem. Por exemplo, em sistemas de tempo real a literatura cita o uso de linguagem ADA, ou até mesmo Java com extensões de tempo real.
No .NET você pode criar thread utilizando o BASIC....