Avatar billede nielsbrinch Nybegynder
11. december 2003 - 23:07 Der er 10 kommentarer og
1 løsning

Hvilke tråde kører der inde bagved?

Jeg har en mængde aspx-sider og en mængde klasser inde bagved med noget funktionalitet, som kan kaldes af alle aspx-siderne.

Hvis der er mange brugere der benytter websiderne samtidig, og laver en masse kald samtidig, bliver det hele så håndteret af én tråd eller mange tråde? Skal jeg selv tråde klasserne så de kan håndtere flere samtidige kald?
Avatar billede arne_v Ekspert
11. december 2003 - 23:20 #1
Jeg ved ikke noget specifikt om IIS og ASP.NET, men hvis vi nu
antager at den er nogenlunde fonuftigt lavet så processer den hver
request i sin egen tråd. Det er eneste måde at få anstændig performance på.
Det betyder at dine utility klasser skal være thread safe ellers kan
det gå galt.

Om den genbruger tråde og om der er et maksimum på antal tråde ved jeg ikke.
Avatar billede nielsbrinch Nybegynder
11. december 2003 - 23:40 #2
Efter tests konkluderer jeg at der _ikke_ er nogen trådning indbygget. Hvis jeg kalder en metode der tager 5 sekunder, fra to forskellige browservinduer samtidig går der 5 sekunder inden den første er færdig og 10 sekunder inden den anden er færdig ...

Det er uanset om jeg kalder statiske metoder eller ej.
Avatar billede nielsbrinch Nybegynder
11. december 2003 - 23:44 #3
Microsoft har godt nok lavet en pæn ThreadPool til mig, som jeg kan bruge - men jeg føler mig ikke forkælet. Man kan kun sende et object med i de metoder man kalder gennem den ThreadPool. Det er såmænd dækkende nok, men det provokerer nok en del snørkle-fejl.

Jeg er på nippet til at lukke spørgsmålet igen. Tak for input, arne ...
Avatar billede arne_v Ekspert
11. december 2003 - 23:45 #4
Enten er din metode så CPU intensiv at den tager 5 CPU sekunder
eller så må være en lock et sted i den.

Jeg nægter at tro på at hvis der er 100 brugere som requester din side
samtidigt så vil den sidste måtte vente 8 minutter.
Avatar billede nielsbrinch Nybegynder
11. december 2003 - 23:49 #5
Sådan ser min metode ud:

public string DoSomething(int s) {
  Thread.Sleep(5000);
  return Environment.TickCount-s+"";
}

Er det at sætte tråden til at sove, ødelæggende for testen?
Avatar billede arne_v Ekspert
11. december 2003 - 23:51 #6
Det burde det ikke være.

Så jeg forstår det ikke.

Men der må være et eller andet trick. Ellers er ASP.NET da totalt
ubrugeligt.
Avatar billede nielsbrinch Nybegynder
12. december 2003 - 00:08 #7
Microsoft skriver selv om Threading, i en artikel om forskelle på ColdFusion og ASP.NET:

Fully supported. Not only do simultaneous page requests happen in separate threads, but also each page can (if needed) spawn its own threads to perform simultaneous or asynchronous work.

Så jeg antager der er noget galt med min test.
Avatar billede arne_v Ekspert
12. december 2003 - 07:57 #8
Opsætning måske ?
Avatar billede nielsbrinch Nybegynder
12. december 2003 - 14:37 #9
Ja. F.eks. kan det være den kun kører én tråd pr. bruger og når jeg sidder med to browser-vinduer er jeg jo den samme bruger.
Avatar billede arne_v Ekspert
12. december 2003 - 14:49 #10
Måske. Jeg kan dog bare ikke helt se pointen i at kode det på den måde.
Avatar billede nielsbrinch Nybegynder
26. januar 2004 - 12:50 #11
Luk
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester