Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Threadproblem bei Indys (https://www.delphipraxis.net/128052-threadproblem-bei-indys.html)

Angel4585 23. Jan 2009 10:00


Threadproblem bei Indys
 
Hallo,

ich teste gerade die Client-Server Kommunikation mit TIdTCPClient und TIdTCPServer.

Sobald sich ein Client zum Server verbindet geht die CPU Auslastung hoch auf 90% bzw auf 49% bei nem Dualcore.
In dem Debugfenster für die Threads sehe ich dass der Thread der die CPU dermaßen auslastet "Scheduler User" heisst, der ist nicht von mir, was ist das für einer und wie mache ich dass er aufhört die CPU so auszulasten?

Den Thread habe ich über die ThreadID ermittelt welche ich in nem ProcessExplorer sehen kann.

Jemand ne Idee wie ich das hinbekomm? Ist blöd ne Serveranwendung zu haben die die CPU auffrisst :gruebel:

Luckie 23. Jan 2009 10:06

Re: Threadproblem bei Indys
 
Schon mal "Scheduler User" in Google eingegeben?

Angel4585 23. Jan 2009 10:17

Re: Threadproblem bei Indys
 
Jop und da bekomme ich jede Menge Schrott.

Wenn ich einen zweiten Client dranhänge kann ich zumindest schonmal sehen dass dies wohl der Thread ist der für jeden Client erzeugt wird(Ich hasse dieses Prinzip, das mit den SocketChannels ist besser)
Aber ich mache ja nichts mit diesem Thread, gibts da ne Einstellung mit der ich dafür sorgen kann das die CPU Auslastung runter geht?

Edit: Hat sich glaube ich erledigt, habe das TIdAntiFreeze auf die Form gezogen un nu gehts scheinbar, ich werd aber mal noch drauf achten :)

Edit2: Na daran lags auch nicht, schonwieder diese Auslastung :(

Angel4585 23. Jan 2009 11:49

Re: Threadproblem bei Indys
 
Aaaaha! Der TIdTCPServer hat einen Scheduler. Dieser wiederum hat da einige TIdTask Objekte, welche ununterbrochen die Onexecute Methode des TIdTCPServers aufrufen.
Ich hab jetzt ein sleep in das onExecute gemacht un jetzt gehts, aber mich würde jetzt schon interessieren aus welchem Grund das OnExecute ununterbrochen ausgeführt wird, welchen Hintergrund hat das?

gsh 23. Jan 2009 18:12

Re: Threadproblem bei Indys
 
vielleicht hast du noch daten im buffer, dann wird nämlich imho die ganze Zeit onexecute aufgerufen

DataCool 24. Jan 2009 22:55

Re: Threadproblem bei Indys
 
@Angel4585:

Wenn sich ein Client zum Server verbindet werden folgende Events ausgelöst:

- ONConnect

Solange der Client verbunden ist immer wieder :

- OnExecute

und danach OnDisconnect.

Seit Indy10 sollte auch nicht mehr für jede Verbindung ein Thread verwendet werden,
dafür ist der Scheduler ja da ;-)

Du sagst Du testest die Kommunikation zwischen Client und Server ?!
Hast Du beides(TIdTcpClient u. TIdTCPServer) in der gleichen Anwendung/Form ?

Das TAntifreeze hast Du ja schon gefunden ;-)
Hast Du auch die Property "ApplicationHasPriotity" auf "true" und "OnlyWhenIdle" auf "false" gesetzt ?

Wie sieht den Dein Code-Gerüst des OnExecute vom Servers aus ?

Folgende Befehle könnten Dir auch nützlich sein :
Delphi-Quellcode:
  if AContext.Connection.IOHandler.InputBufferIsEmpty // ....
  AContext.Connection.IOHandler.CheckForDataOnSource(2500); // Intervall nach Belieben
  AContext.Connection.IOHandler.CheckForDisConnect;
Ich habe auf jeden Fall mit Indy10(Version 10.2.3) einige Dienste auf verschiedenen Server-Systemen laufen,
die teilweise über eine Million Anfragen an Tag behandeln.
Die laufen mit 0-2% CPU-Last und ohne Speicherleck.

Greetz Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz