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


Långsam ThreadPool

Postades av 2008-02-17 13:21:06 - Anders Lundberg, i forum c# (c-sharp), Tråden har 1 Kommentarer och lästs av 997 personer


Hejsan,

Jag sitter med ett ThreadPool-exempel från övningarna till MCTS Exam 70-536. I princip går det ut på att starta upp 4 trådar i en ThreadPool. Men så som exemplet är skrivet, när jag kör programmet, används samma tråd om och om igen såvida jag inte själv lägger in en rejäl fördröjning, på över 1 sekund, i callback'en.

Jag har spårat programflödet en smula och kan konstatera att alla fyra anropen till QueueUserWorkItem sker ögonblickligen, men sedan verkar det ta ett bra tag för trådarna att starta upp. Om jag sätter fördröjningen (se koden nedan) i varje tråd till 5 sekunder, så hinner ändå inte sista (4:e) tråden starta innan första tråden är klar. Det tar alltså mer än fem sekunder för ThreadPool att starta upp 4 parallella trådar!

Även om jag använder SetMinThreads() så att minst 5 trådar alltid skall ligga i poolen, blir resultatet detsamma.
Min tolkning, just nu, är att denna minimigräns inte gäller förrän man faktiskt, i praktiken, har haft 5 trådar igång samtidigt. (och att det inte ligger 5 färdigskapade trådar i poolen innan dess) Jag kan alltså vänta mig att innan applikationen har behövt 5 trådar så kan det hel plötsligt krävas över en sekunds väntan när en ny tråd behöver startas upp. Och rent generellt gäller då, med ThreadPool att så fort jag behöver använda en tråd mer än det antal jag någonsin tidigare behövt, så måste jag räkna med denna dryga sekunds väntan på att tråden skall komma igång.

Jag har inte hittat något om detta i övningsboken. Är jag på rätt spår eller?

----------
Exempelkod

static void Main(string[] args)
{
WaitCallback callback = new WaitCallback(ShowMyText);

ThreadPool.QueueUserWorkItem(callback, "Hello");
ThreadPool.QueueUserWorkItem(callback, "Hi");
ThreadPool.QueueUserWorkItem(callback, "Heya");
ThreadPool.QueueUserWorkItem(callback, "Goodbye");

Console.Read();
}

static void ShowMyText(object state)
{
string myText = (string)state;

Thread.Sleep(5000); //Så att denna tråd inte blir färdig innan nästa hinner starta!!!

Console.WriteLine("Thread: {0} - {1}", Thread.CurrentThread.ManagedThreadId, myText);
}


Svara

Sv: Långsam ThreadPool

Postades av 2008-02-18 10:31:25 - Roger Alsing

Du verkar ha helt rätt..

om man modifierar ditt exempel lite:

static void Main(string[] args)
{
WaitCallback callback = new WaitCallback(ShowMyText);

//maxxa ut threadpoolen så att minthreads fylls
//här kommer det ta tid innan alla trådar skapats
ThreadPool.QueueUserWorkItem(callback, "Hello");
ThreadPool.QueueUserWorkItem(callback, "Hi");
ThreadPool.QueueUserWorkItem(callback, "Heya");
ThreadPool.QueueUserWorkItem(callback, "Goodbye");
ThreadPool.QueueUserWorkItem(callback, "Hello");
ThreadPool.QueueUserWorkItem(callback, "Hi");
ThreadPool.QueueUserWorkItem(callback, "Heya");
ThreadPool.QueueUserWorkItem(callback, "Goodbye");

//vänta tills alla trådar kört klart
Console.ReadLine();

//fyll threadpoolen igen
//följande jobb kommer att utföras instant , med olika trådar eftersom trådarna redan finns...
ThreadPool.QueueUserWorkItem(callback, "Hello");
ThreadPool.QueueUserWorkItem(callback, "Hi");
ThreadPool.QueueUserWorkItem(callback, "Heya");
ThreadPool.QueueUserWorkItem(callback, "Goodbye");
ThreadPool.QueueUserWorkItem(callback, "Hello");
Console.ReadLine();


}

static void ShowMyText(object state)
{
string myText = (string)state;

//gör writeline innan sleep, så ser man direkt när tråden börjar köra
Console.WriteLine("Thread: {0} - {1}", Thread.CurrentThread.ManagedThreadId, myText);

Thread.Sleep(5000); //Så att denna tråd inte blir färdig innan nästa hinner starta!!!

}


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

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 570 808
27 960
271 761
578
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