[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