[C con Clase] Problema de uso de CPU

David Fire ddfire en gmail.com
Mar Mar 9 23:26:18 CET 2010


la llamada SI tiene que ser bloqueante
busca "IPC" inter process comunication.
la idea es que un thread le manda al otro la info por medio de una cola
"queue" del sistema operativo.
el que recibe la informacion esta dormido hasta que esta llega tonces no
consume CPU.
busca IPC queue
http://www.cs.cf.ac.uk/Dave/C/node25.html
mandame un mail manana y te  paso unas clases que hice para la facu que
manejan todo y es transparente para vos (o casi...)
David

El 9 de marzo de 2010 18:26, pogui <poguijuaz en gmail.com> escribió:

> Hola David, gracias por responder,
> Desconosco a lo que te referís. Me das alguna pista?
> Estoy bajo gnu/linux.
> Al parecer que la llamada no sea bloqueante es la solución ya que si
> incluyo por ejemplo un retraso con un sleep que no consume instrucciones del
> procesador, el consumo baja considerablemente.
>
> gracias por tu tiempo.
>
> David Fire escribió:
>
>> hola
>> en vez de utilizar una lista utiliza una cola del sistema operativo, la
>> llamda es bloqueante, osea en vez de estar perdiendo tiempo y consumiendo
>> cpu mirando si hay datos, se va a quedar durmiendo esperando los datos.
>>
>>
>>
>> El 9 de marzo de 2010 12:15, pogui <poguijuaz en gmail.com <mailto:
>> poguijuaz en gmail.com>> escribió:
>>
>>
>>    Hola lista, tengo el siguiente problema:
>>    Tengo una porción de memoria dinamica (una simple cola) compartida
>>    entre cierta cantidad de threads, unos threads que atienden
>>    conecciones tcp/ip agregan datos a dicha estructura dinamica, y
>>    otro thread es el encargado de sacar datos y procesarlos.
>>    Ahora el problema es el siguiente, el thread encargado de sacar
>>    los datos de la estructura dinamica y procesarlos, dispara mi cpu
>>    al %100 ya que está en un bucle infinito checkeando que si hay
>>    datos nuevos a procesar segun el siguiente codigo:
>>
>>    #include <stdio.h>
>>    #include <stdlib.h>
>>    #include <pthread.h>
>>
>>    #include "sistemStack.h"
>>    #include "tsmsp.h"
>>
>>    SMSpNodo primero,ultimo; /* el stack de datos a procesar de ambito
>>    global*/
>>    pthread_mutex_t outBoxMutex; /*Mutex para proteger dicha memoria
>>    dinamica*/
>>
>>    void* outBox(void* connfd) /*Thread encargado de sacar datos y
>>    procesarlos*/
>>    {
>>      int done=1;
>>      struct smsData* smsToSend;
>>      printf("Thread del outBox lanzado...\n\n");
>>        while(done)  /* el bucle que consume %100 de CPU en cuestión*/
>>      {
>>          pthread_mutex_lock(&outBoxMutex);
>>          smsToSend=smsGet(&primero, &ultimo); /*Tratamos de sacar un
>>    dato de la cola  (estructura con datos  o un "0" si no hay datos q
>>    procesar)*/
>>          pthread_mutex_unlock(&outBoxMutex);
>>          if(smsToSend != 0) /* se encontró algun dato para procesar*/
>>          {
>>              printf("outBox: se detectó mensaje a enviar\n");
>>              sendSMS(smsToSend);   /* Procesamos el dato*/
>>          }
>>      }
>>
>>      pthread_exit(NULL);
>>    }
>>
>>
>>    El codigo funciona bien, pero no esta bien que utilice tanto cpu,
>>    si comento el while todo regresa a la normalidad, pero dejo de
>>    procesar los datos.
>>    Hay alguna manera menos perjudicial de hacer esto?
>>    En que me estoy equivocando?
>>
>>    Espero haber explicado bien el problema,
>>    Gracias por su tiempo.
>>
>>    _______________________________________________
>>    Lista de correo Cconclase Cconclase en listas.conclase.net
>>    <mailto:Cconclase en listas.conclase.net>
>>
>>
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>>    Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>    <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>
>>
>>
>>
>> --
>> (\__/)
>> (='.'=)This is Bunny. Copy and paste bunny into your
>> (")_(")signature to help him gain world domination.
>>
>> ------------------------------------------------------------------------
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100309/dbf06975/attachment.html>


Más información sobre la lista de distribución Cconclase