Toon posts:

[c++] Winsock send vreet CPU

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een simpel tcp socket appje. Een client
stuurt een bepaalde hoeveelheid bagger (10MB bijv.) naar een server procesje. Server procesje leest data en doet er verder niks mee.
Client is gebouwd met C++ Builder, server proces draait op een Linux bak. De client maakt gebruik van Winsock, dus geen standaard Borland componenten oid. Alles werkt op zich prima, alleen viel mij op dat tijdens het zenden de CPU usage naar 100% springt. Dat lijkt mij niet helemaal in de haak :) Kijkend naar bijvoorbeeld een FTP of SCP tool, daar gebeurt dat absoluut niet.
Ik gebruik non-blocking I/O. Het zenden van de data gebeurt in een loopje met blokken van 8KB. Verder gebeurt er niks spannends in die loop.

Iemand een idee wat dit kan veroorzaken ?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Nou stuur maar eens een filmpje over je netwerk heen, dan krijg je bij sommige pc's hetzelfde. (Ligt beetje aan je HD, netwerksnelheid e.d.)
Oftewel, de snelheid van het internet (ftp, http) is niet te vergelijken met je 100MBit thuis. Al helemaal niet als beide computers op volle kracht kunnen werken.
Ik denk niet echt dat er iets mis is zolang je mp3'tje op de achtergrond door kan spelen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:48

.oisyn

Moderator Devschuur®

Demotivational Speaker

het is heel simpel: je gebruikt non-blocking sockets. Het loopje blijft lopen tot er data binnen is. Als je blocking sockets gebruikt, dan wacht je thread totdat de data er daadwerkelijk is, en dus heb je ook geen 100% cpu usage :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Hmmm, maar als ik bijv. een secure copy doe van machine 1 naar machine 2 (over LAN dus) dan zie ik ook niet 100% CPU gebruik :?

Trouwens, als ik blocking I/O gebruik springt ie ook naar 100%, dus daar ligt et niet aan :{

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:48

.oisyn

Moderator Devschuur®

Demotivational Speaker

hmm wazig
is er niet iets anders wat 'm ophoudt? (een andere thread misschien?)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Aangezien het al 2 keer gezegt is :)
"je gebruikt non-blocking sockets"

oplossing: gebruik de select() functie. Ik geloof dat winsock ook nog een eigen implemetatie heeft. Heeft WSAselect() uit m'n hoofd. Laatste zelf nog niet gebruikt, even uitzoeken. select() werkte perfect voor mij toen :)

  • bloody
  • Registratie: Juni 1999
  • Laatst online: 21:54

bloody

0.000 KB!!

je zou ook eens naar IOCP kunnen kijken (io completion ports)

nope


Verwijderd

Topicstarter
Op dinsdag 23 april 2002 08:38 schreef morphje het volgende:
Aangezien het al 2 keer gezegt is :)
"je gebruikt non-blocking sockets"

oplossing: gebruik de select() functie. Ik geloof dat winsock ook nog een eigen implemetatie heeft. Heeft WSAselect() uit m'n hoofd. Laatste zelf nog niet gebruikt, even uitzoeken. select() werkte perfect voor mij toen :)
Je hebt gelijk, select() is m'n vriend :)
Denk trouwens dat ik ook lekker afstap van non-blocking I/O, aangezien dat vaak een 'waste of cpu' is, en meestal niet is vereist.

Thx all.

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Op dinsdag 23 april 2002 12:20 schreef krims0n het volgende:
Je hebt gelijk, select() is m'n vriend :)
Denk trouwens dat ik ook lekker afstap van non-blocking I/O, aangezien dat vaak een 'waste of cpu' is, en meestal niet is vereist.

Thx all.
Altijd blij te zijn om van dienst te zijn :)
Wel misschien nog een opmerking ...
Vaak word bij select een non-blocking socket gebruikt om er echt zeker van te zijn dat hij je systeem niet blokeerd om een of andere vage reden.

Misschien dat je ergens een bugje hebt waardoor select lege sockets pakt, maak je je socket non-blocking ramt ie er net zo goed doorheen :)

Dan weet je iig zeker dat je socket je programma niet kan blocken. Ik heb het zelf nog niet toegepast, maar ik heb het al in diverse programma's gezien.

Ik denk ik meld het nog maar even :)
Pagina: 1