06. juli 2009 - 17:56Der er
10 kommentarer og 1 løsning
Mange samtidige Threads , er der begrænsing.
Hej C#
Jeg laver noget med nogen Asynchronous http handler i aspx.
Men jeg tror nu ikke at man behøves at kende noget til aspx eller Asynchronous http handler for at have en mening om mit spørgsmål.
I min kode har jeg behov for at køre en masse arbejde samtidig som står og venter på svar fra andre ting. Jeg har bruge for optil 10.000 eller flere af den slags processer.
P.t Starter jeg min proces op ved at skrive : ThreadPool.QueueUserWorkItem(new WaitCallback(StartAsyncTask), null);
Og så er der en metode som hedder StartAsyncTast som er den der sover og tilsidst kalder tilbage til noget andet med en delegate.
Mit problem er at denne løsning slet ikke kan håndtere særlig mange forbindelser, når der er ca 50 StartAsyncTask igang samtidig begynder systemet at hænge, og jeg ved at det er StartAsyncTask som først bliver kaldt mange sekunder senere.
Er der noget om tråde jeg har misforstået her (det tror jeg), er det slet ikke meningen at man skal kunne køre 10.000 samtidige thread .
Jeg tænkte på at en bedre løsning måske ville være noget i stil med kun at have en thread kørende som lavede alt arbejdet for alle de forskellige request. Så skulle man bare tilføje opgaven til en liste i denne tråd, og den skulle så hver 100 ms kigge på alle opgaverne og evt kalde tilbage hvis det var overstået.
Jeg håber at nogen kan forstå mine problemer og give et inteligent svar, eller gerne nogen links og gode ord man kan søge på.
Med venlig hilsen og tak jeg har kun 15 point tilbage.
Du vil faa langt bedre performance ved at have nogle thread pools og nogle work queues, hvor noget der venter ikke holder paa en blocking thread, men bare ligger og saa bliver flyttet over i en ready koe, naar den ikke skal vente laengere.
Jo. Det må blive noget i den stil. Kan dog ikke helt forstå hvorfor jeg så skulle have brug for en pool.
På den måde kan jeg vel bare klare mig med en enkelt tråd. De venter , men når de så ikke skal vente længere, så er det de skal gøre overstået øjeblikkigt og de kan lukkes ned.
Ok. Det kan jeg godt se, at hvis der var flere cpu´er kunne det være meget smart med flere tråde.
Det kunne jo også være at hvis man sov 100 ms, og så tjekkede for 10.000 opgaver og så sov 100 ms igen, at cpu ville blive noget undeligt ujævnt belastet. Men det kunne man jo også løse selvom man stadig kun have en tråd.
Super tak for svar. Jeg blev rigtigt frustreret her til morgen da jeg opdagede at min fine nye asynkrone ting ikke virkede alligevel. men nu er jeg glad igen.
Jeg tror vist kun den autuelle server p.t. har en core, og den skal snart skiftes ud med en cloud server, så hvordan det er der vil jeg lige undersøge.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.