Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Udp socket med recive thread.

Postades av 2007-03-01 10:01:55 - Johan Andersson, i forum asp.net generellt, Tråden har 12 Kommentarer och lästs av 913 personer

Hej på er!

Har ett par funderingar/tankar angående en applikation som hanterar UDP kommunikation som jag skulle behöva ha lite tips och svar angående. Jag börjar med att beskriva applikationen och dess omgiving.


Systemet består av ett 15-tal hårdvaru klienter i ett ethernet nätverk som kommunicarar via UDP till en central server där min .NET 2.0 applikation körs. Klienterna har till uppgift att läsa in infromation från omgivningen och i sin tur skicka data strängar till server applikationen. Ca 7st strängar /sek från varje klient. Detta innebär alltså att jag igenomsnitt får in ca 100 st datasträngar/sek till min udp socket i server programmet. Dessa datasträngar tas emot, verifieraras, och analyseraras. Där efter görs medelvärdesberäkningar och diverse andra processer körs beroende på resultat.

Klassen som hanterar UDP kommunikationen innehåller en Thread som konternuerligt ligger och tar emot data på en specifik UDP port. Jag har fått känslan av att jag tappar en hel del data från klienterna. Jag vet att UDP inte är ett säkert protokoll vad gäller leverans av meddelande, men det känns som tok för mycket trafik faller bort. I dagsläget startas och körs analys och bearbetnings processerna på den thread som oxå tar emot udp datan, den gör alltså detta utan att starta någon nya tråd för dessa processer. Vad jag tror händer är att dessa processer då tar för mycket tid av min UDP thread, som inte hinner med att ta emot alla inkommande datasträngar. Ett förslag vore att starta alla analyser och bearbetnings processer på en Thread pool, som gör att dessa rutiner startas från min UDP Thread men sedan körs på fristående threads. Detta borde göra att min udp recive thread får tid att hantera de meddelande som kommer in, men då kanske någon annan problematik uppstår?

Är det någon som har några tips hur man löser ett sådant här senario på bästa sätt?, andra råd och tips?

Tack på förhand
Johan


Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-01 10:07:37 - Johan Idstam

Mitt förslag är att spara ner allt mottaget data i en kö av något slag. Låt sedan en annan tråd än Udp-tråden ligga och plocka meddelanden från kön i sin egen takt. Då kan du sänka prion på den tråd som behandlar meddelanden så att den (teoretiskt) inte tar resurser av Udp-tråden.


/johan/


Svara

Sv:Udp socket med recive thread.

Postades av 2007-03-01 10:11:53 - Johan Andersson

Problemet är bara att min server applikation, behöver agera så fort som möjligt på den inkommna datan då diverse olika sakers styrs beroende på den inkommna datan. Så jag behöver processa den när den kommer in. Frågan är bara hur man löser detta på bärsta sätt?


Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-01 14:30:03 - Johan Idstam

Om det är viktigare att processa meddelanden så fort som möjligt än att få alla meddelanden så tycker jag att du ska processa på samma tråd som du tar emot meddelanden. Så att det blir sekvensiellt.

Om det är viktigare att processa många meddelanden tycker jag du ska trycka ner meddelandena i en kö (tex en System.Collection.Generic.Queue<>) och ha en tråd som kollar och processar kön hela tiden.

Om du kollar kön i en loop kommer det inte bli många millisekunder i fördröjning innan du tagit hand om respektive meddelande. Om det är 'dyrt' att processa ett meddelande kan du använda trådpoolen för själva processandet.

Jag tror inte at Queue är trådsäker så tänk på att lägga Enqueue/Dequeue -operationer inom ett lock-block.

/johan/


Svara

Sv:Udp socket med recive thread.

Postades av 2007-03-01 16:16:37 - Johan Andersson

Tack för svaret Johan, alltid bra med feedback och förslag på lösningar :)

Är dock inte riktigt med på vad skillnaden blir i de två följande exemplen, det första exemplet är som du beskrev det och det andra som jag funderade över i mitt första inlägg. Är dock ingen Thread expert.

1. Vid inkommen datasträng köa strängen i en queue, denna queue har sedan en egen tillägnad tråd som har till uppgift att plocka ur meddelandena, för att processa dem på threadpool.


2. Vid inkommen datasträng starta processa meddelandet på threadpool.


Vad vinner man på att lägga den inkommna datan i en Queue och sedan processa dem i en threadpool, än att processa dem direkt i en threadpool. Då threadpoolen ändå är skiljd från min UDP thread och får sina egen 'time slice' ?

Finns det fler personer där ute som har någon bra lösning på detta problem ?, förslag tas mer än gärna emot.



Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-01 16:18:14 - Oskar Johansson

Om du har en mellanlandning i en queue så kan du t.ex. enkelt lägga till prioritet, eller se till att bara x antal processningar får köras samtidigt. Den möjligheten har du inte om du slänger direkt i threadpool.


Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-01 16:45:46 - Andreas Hillqvist

Dit inlägg väckte två frågor hos mig:

Det låter som om du beskriver en realtids applikation. JAg undrar hur lämpligt windows och .net plattformen är för att utveckla realtidsapplikationer?

Hur skulle det påverka att använda en port för varje klient.
Skulle det kunna reducera förluster?


Svara

Sv:Udp socket med recive thread.

Postades av 2007-03-01 17:01:45 - Johan Andersson

Vad applikationen gör är att den samlar ihop mätdata från diverse klienter, baserat på datan som kommer in styr applikation olika förlopp. Jag skulle inte vilja kalla det realtidapp kanske, men givetvis är så bra prestanda och så låga svarstider som möjligt önskvärt. Applikationen fungerar i dagsläget, men då jag märkt att jag tappat en hel del meddelanden fick det mig givetvis att börja fundera över en bättre lösning. Det känns inte som att den lösning jag använder i dagsläget med att köra alla algoritmer och beräkningar från samma tråd som tar emot Udp data är optimalt, så därför kom tanken med att köra algoritmerna och processandet på en threadpool istället, vad tror ni om detta?, kommer det medföra bättre prestanda då UDP tråden kommer att bli mera avlsatad?, kanske är en Queue ett bra alternativ det oxå?

Jag har tyvärr inte kontroll över klienterna (utvecklas inte av mig) och de kommunicarar alla på samma port, så att ändra port är tyvärr inget alternativ. Därför måste jag använda endast en UDP tråd i min applikation som är bunden till denna port och där kolla avsändarens ip för att få identited på meddelandet.


Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-05 22:44:02 - Jan Bulér

Jag skulle troligtvis gjort ungefär så här:

Klient -> UDPmsg -> Port -> (A:Tråd som tar emot data) -> Queue -> (B:Tråd hämtar data från kön) -> (C:Tråd/trådar som behandlar data).

A har som enda uppgift att ta emot inkommande data på angiven port och utan stoppa in informationen i en kö, kön kan lösas på olika sätt.

B Ligger och bevakar kön, om data finns i kön och någon C-tråd "ledig" så hämtar B data från kön och skickar det till C(n) för bearbetning. B startar det antal C-trådar som behövs.

C kan vara en eller flera trådar som har till uppgift att behandla data. Om behandlingen av varje data tar längre tid än själva mottagandet, A och B, så kan du ju skapa flera C-trådar och på så vis få en parallell behandling av datat.

Alternativt kan du skippa B och skapa ett antal C-trådar som alla själva bevakar kön. Så fort en C-tråd är "ledig" kollar den om det finns något i kön och hämtar i så fall första datat från kön för behandling.




Svara

Sv:Udp socket med recive thread.

Postades av 2007-03-06 09:33:44 - Andreas Hillqvist

"Bara för att man har mer spadar så går det inte fortare att gräva."
Citat från en lärare.

I detta fallet rör det sig om user level trådar.

Behövs det verkligen mer än två trådar?
Vad tjänar man på att ha tre trådar?

Den tråd som läser från kön kan väl även behandla data.


Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-06 10:46:31 - Oskar Johansson

Rent hypotetiskt skulle det gå snabbare om:
a) uppgiften som ska göras kan tänkas vänta på någonting annat (ex. en fil, nätverk etc.)
eller
b) smp (flera fysiska trådar mao)


Svara

Sv:Udp socket med recive thread.

Postades av 2007-03-06 10:57:37 - Andreas Hillqvist

Så i detta fallet tycker jag tre trådar är överdrift.

Eller kan du konkret se någon vinst som jag missar?


Svara

Sv: Udp socket med recive thread.

Postades av 2007-03-06 17:50:20 - Oskar Johansson

Nej, men å andra sidan har jag ingen aning om vad som görs med datan.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 170
27 953
271 705
646
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies