🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #29832

Re: problemas con los threads

#29832
From: Chano G�mez
Date: Thu, 16 Oct 1997 00:00
52 lines
2394 bytes
> >> documetacion...El codigo es muy sencillo, y no parece que
> >> revista tiempo de proceso... Mucho menos que el polling.
> >
>         // mientras haya datos disponibles... do!
>         while(entrada.avail()>0){
>             codigo !!!!!!
>         }

Dos posibilidades:

(1)
Si pretendes hacer lo que creo (leer TODOS los datos en el bucle
while), ese c�digo est� mal. Aparte de que el m�todo correcto es
available(), y ni avail(), la forma de detectar el fin de archivo, o
el momento en que debes dejar de leer no es mediante available(), sino
mediante la comprobaci�n de que read() devuelve -1 o de que
read(byte[]) devuelve un n�mero menor o igual a cero.

======================
InputStream is = ...;
byte[] buffer = ...;
int cuenta;
while((cuenta=is.read(buffer))>0){
    // Hacer cosas con los datos le�dos.
    }

is.close();
// Aqu� har�amos algo para avisar al resto de threads de que los datos

// ya han sido le�dos
=========================

Ten en cuenta que available() puede devolver 0 (porque los paquetes de
datos tarden en llegar debido a la saturaci�n de la red) pero que aun
queden cosas por leer del socket.

(2)
Si lo que en realidad quieres es que el thread haga su trabajo (antes
de entrar en el while) y al final de su bucle principal lea lo que
haya disponible del socket , entonces es normal que consuma recursos.
Est�s usando el 100% de la CPU en el bucle principal. No se de qu� te
extra�as. De hecho, est�s usando la t�cnica de "polling", que en
teor�a quer�as evitar.

Ser�a mejor que pusieras un trozo del programa menos "mutilado", para
que veamos donde se est� consumiendo CPU. Ten en cuenta que a menos
que hagas un Thread.sleep() en alg�n sitio, o hagas un lectura
bloqueante en el socket (sin comprobar available()), tu thread nunca
descansa, y nunca deja de consumir recursos.

Chano.
Technical Details
Message-ID: <34468E1C.58E70E8D@ran.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <621phh$j4n$1@eubuf21.eu.concert.net> <3444F36C.5A2A0EB4@ran.es> <624qaa$bc4$1@eubuf21.eu.concert.net>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,81ae46b387e0e534
X-Google-Attributes: gid1116f3,public
From: "Chano G�mez" <chano@ran.es>
Subject: Re: problemas con los threads
Date: 1997/10/16
Message-ID: <34468E1C.58E70E8D@ran.es>
X-Deja-AN: 281147822
References: <621phh$j4n$1@eubuf21.eu.concert.net> <3444F36C.5A2A0EB4@ran.es> <624qaa$bc4$1@eubuf21.eu.concert.net>
Organization: Unisource Espana NEWS SERVER
Newsgroups: es.comp.lenguajes.java