[C con Clase] Problema de uso de CPU

pogui poguijuaz en gmail.com
Mie Mar 10 01:24:11 CET 2010


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





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