[C con Clase] Problema de uso de CPU

David Fire ddfire en gmail.com
Mie Mar 10 02:03:57 CET 2010


depende del kernel la cantidad maxima, por defecto si no me equivoco es de
16MB.
igual cuando tratas de poner algo y no entra te avisa, con lo cual no perdes
los datos.
tambien podes usar semaforos y memoria compartida...
hay que analizar el problema.
David


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

> Muy buena información! gracias.
> Solo me queda una duda, este tipo de colas tiene algun limite, es decir,
> puedo incluir ilimitada cantidad de elementos como lo es en una estructura
> dinamica?
>
> David Fire escribió:
>
>> 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 <mailto:
>> 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> <mailto: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>
>>           <mailto: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>
>>           <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
>>        <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>
>>
>>
>>
>>    _______________________________________________
>>    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/bfc0a1c3/attachment-0001.html>


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