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


En amatör thread fråga

Postades av 2003-07-11 14:01:03 - Göran Persson, i forum c# (c-sharp), Tråden har 18 Kommentarer och lästs av 991 personer

Kan man jämföra en thread med en while loop som ligger och kör hela tiden eller hur fungerar det. Hur beter sig en loop inuti en therad. Kör den klart innan threaden kör sitt andra "varv"? Som ni hör så vet jag inget om threads så all info är jag tacksam.

MVH Göran P


Svara

Sv: En amatör thread fråga

Postades av 2003-07-11 14:39:32 - Johan Normén

Hej...

Nja en trådning kan inte jämföras med en whileloop. :-)
En trådning har sin egna process. När du programmerar så blir allt du gör synkront.
Du går rad för rad etc... Om du vill göra två saker samtidigt går inte detta då du alltid måste vänta på att operationen innan är utförd.

Om du slänger upp en tråd slänger du upp en egen process som går vid sidan om fast under samma AppDomain. Här kan du utföra precis vad du vill precis som i din vanliga Single tråd. (Applikatione du startar går alltid under en tråd.)

Det är detta som då kallas asynkron programmering.
Tänk dig att du öppnar en exe fil. Denna går oftast under en tråd, trycker du på knappen Save kan du inget göra förrän alla operationer under save är utförda, Applikationen är typ fryst. Om du däremot slänger upp en tråd när man trycker på save och utför sparandet under den nya tråden så kan du fortsätta att göra andra saker i din applikation. Man kan ha hur många trådar öppna som helst, det är typ minne och datorns prestanda som sätter stopp för detta. När du ex kör Kazaa så kör varje nerladdning under sin egna tråd med sina hanteringar.

Är du med? Man kan förklara trådning på många sätt, men jag hoppas detta gav dig den bild du var ute efter.

//Johan N


Svara

Sv: En amatör thread fråga

Postades av 2003-07-11 14:48:39 - Göran Persson

Ok nu klarnade det tackar.

MVH Göran


Svara

Sv: En amatör thread fråga

Postades av 2003-07-12 14:26:31 - Patrik Löwendahl

Lite småsaker bara,

1) Du skapar inte en process.. det hade varit katastrof om du gjort det. Relationenerna är:

OS
|
Process (CLR)
|
Appdomain(Default) Appdomain(created)
| | |
Thread(Main) Thread(created) Thread(Appdomain main)


En process tilldelas vanligtvis från operativssytemet och är en låda där du för köra kod. Lådan isolerar din kod från operativsystemets och andra applikationers kod i minnet. Det för att de inte ska störa varandra, dels ur ett minnes perspektiv, varje process får vanligtvis 2gb virtuellt minne tilldelat sig (för CLR'n är det 3gb) vilket är totalt isolerat från minnet som andra applikationer använder. Dels kan en process gå ner utan att störa andra, osv.

En appdomain är en lättviktsprocess (egentligen ganska tung men mindre tung än en process) Det vill säga den har samma drag som en OS process, men skapas och hanteras av din instans av CLR'n som din applikation dragit igång.

En Tråd är en del av processorns tid. En x86 processor jan igentligen bara hantera en tråd åt gången men använder något som heter Thread Scheduling (TS) för att få det att verka som den arbetar med flera trådar åt gången. Varje tråd får ett id som TS¨n håller reda på och varje tråd får en "time slice" tilldelad sig. När processorn sedan arbetar, så frågar den TS efter nästa jobb, TSn ger den en tråds instruktioner låter den tråden exekvera så länge som den har tillåtelse, sedan söver den tråden (Sleep state) och låter nästa tråd exekvera sin fulla tid. Att byta tråd som exekverar på det här sättet kallas Thread Switching.

En thread switch är dyr och passar man sig inte kan den kosta mer än vad den smakar, dvs skapar man en massa trådar så skapar du också för varje tråd en thread switch och på det viset overhead för din exekvering. Vilket faktiskt i slutändan kan leda till att applikationen blir dramatiskt mycket långsammare. Det kan ju hända att det krävs ett antal cyklar och thread switches innan din tråd är klar med sitt arbete.


2) Varje appdomains tråd använder samma minnes area som resten av appdomainen, men har också ngt som heter thread local storage, det är minne som den tilldeleas när den skapas, runt 2mb. Där finns den trådspecifika stacken och liknande. Att minnet på din dator skulle ha betydelse när det gäller hur många trådar du kan skapa stämmer inte riktigt. Däremot kan man säga att om man anvädner väldigt m¨ånga trådar och har lite minne, så kommer swap filen att användas flitigt och du döddar effektivt din maskins prestanda. Man kan i princip spawna hur många trådar som helst, men ju fler trådar, desot mer thread swtich och Thread Local storage, desto mer last på din maskin och slutligen kommer den att knappt svara.

3) Försök undvika att skapa trådar om du inte verkligen behvöer dem. Titta istället på asyncrona delegater, thread pools och asyncorna metoder (bal IO klasserna har sådana). De använder sig av två st tråd poolar nämligen, och på det viset blir din trådhantering effektivare. De två trådpoolarna heter I/O Threads (avänds för IO operationer mot skärm, disk, nätverk osv) och Worker thread pool (används för andra jobb). Båda två har en max pool på 25 trådar by default.

Bara om du skickar iväg ett jobb som kommer att ta lång tid att exekvera, är det vettigt att skapa sina egna trådar, annars är det ovan metoder som ger bästa prestanda och skalbarhet.


Svara

Sv: En amatör thread fråga

Postades av 2003-07-12 14:30:45 - Johan Normén

Använde nog fel ord i mitt samanhang. Vad jag menade med Process var typ sitt enga flöde, använding.
Inte det process du syftar på. Kanske var fel ord att säga Process, då vi syftar på två olika saker.

//Johan N


Svara

Sv: En amatör thread fråga

Postades av 2003-07-12 14:32:43 - Patrik Löwendahl

inte för att vara sådan, men en process är en process på en dator.

För UML/OOD är det en annan sak och för en affärsutvecklare en tredje.


Svara

Sv: En amatör thread fråga

Postades av 2003-07-12 15:16:31 - Johan Normén

Jo jag vet. Men nu pratade jag inte om en dator utan om en hantering.
Du får gärna ge mig ett mer passande ord, då det skulle uppskattas.

Kallar mkt för just "processer" då det utför något.

"Att minnet på din dator skulle ha betydelse när det gäller hur många trådar du kan skapa stämmer inte riktigt. Däremot kan man säga att om man anvädner väldigt många trådar och har lite minne, så kommer swap filen att användas flitigt och du döddar effektivt din maskins prestanda."

1... För mig är SWP filen till för minneshanteringen och används i olika fall. Och ju mer data du fyller ju större kan Swap filen bli och skada prestandan. Ville inte i min förklaring gå ner för djupt i alla detaljer, hur minnet hanteras och när/var saker lagras och när swapfilen kommer in. För lite minne är ju oxå en teknisk fråga på vad man utför på sin dator. 512 MB kan ju faktiskt oxå vara för lite minne beroende på vad man kör för processer på sin dator.

2... Sedan kan faktiskt två trådar slöa ner datorn beroende på vad du utför. Självklar tar inte själva tråden upp en massa minne, utan det som händer i själva tråden.

Mvh Johan N


Svara

Sv: En amatör thread fråga

Postades av 2003-07-12 15:45:01 - Patrik Löwendahl

Som det står i min förklaring där uppe, en tråd är en bit av processorns tid.

1) klart swap filen är för minneshantering. Det är ju där data skrivs ner när det "verkliga minnet" är fullt eller saker där inte använts på väldigt lång tid. Den tar ju det som inte används just nu och skirver temporärt ner den i swapfilen, och läser sedan upp den igen om ngn skulle fråga efter det.

2) En tråd kan slöa ner dator, om du skriver tunga loopar osv. Men det beror ju inte på overheaden som en tråd ger utan ngt helt annat. Då är det thread schedulern som tilldelar din tråd mer tid så fort det finns tid ledigt för att du skall kunna utföra ditt arbete snabbare, vilket gör att en tråd kan få 99% av processorns tid och inte mycket annat skulle fungera.


Svara

Sv: En amatör thread fråga

Postades av 2003-07-12 16:11:43 - Johan Normén

Det var typ det man utför i tråden som jag syftade på då jag sa att det kan ta kräm av datorn. Inte själva tråden i sig.

Nu skall jag ut o parta.
Vi hörs.

Mvh Johan N


Svara

Sv: En amatör thread fråga

Postades av 2003-07-13 00:53:42 - Per Hultqvist

Följdfråga:

När bör man skapa en ny AppDomain (och en ny thread i den) i stället för att skapa en ny tråd i default-appdomainen?


Svara

Sv: En amatör thread fråga

Postades av 2003-07-13 10:44:37 - Mattias Sjögren

>Det för att de inte ska störa varandra, dels ur ett minnes perspektiv, varje process får vanligtvis 2gb virtuellt minne tilldelat sig (för CLR'n är det 3gb)

CLR processer har också 2 GB som default. 3 GB finns det stöd för fr.o.m. v1.1 av ramverket, men det kräver at OS startas med /3GB alternativet och att EXE filen som startar processen har flaggan IMAGE_FILE_LARGE_ADDRESS_AWARE satt i PE huvudet.


>2) Varje appdomains tråd använder samma minnes area som resten av appdomainen

Det här (och figuren ovan) antyder att en tråd tillhör en (och endast en) appdomain. Så är inte fallet, en tråd kan anropa över appdoman gränser inom samma OS process. Och att skapa en ny appdomain innebär inte automatiskt att man även drar igång en ny tråd.


MS


Svara

Sv: En amatör thread fråga

Postades av 2003-07-13 16:36:18 - Patrik Löwendahl

Jo, men den skapas väl under appdomainens context?

Så även om den kan anropas över appdomain gränserna så har den väl tillhörighet i den appdomainen den skapades i?


Svara

Sv: En amatör thread fråga

Postades av 2003-07-13 19:15:43 - Johan Normén

Vad jag vet så skapas tråden under den appdomän du befinner dig i. Sedan kan du komma åt den via andra appdomäner.

Precis som du skriver.

//Johan N


Svara

Sv: En amatör thread fråga

Postades av 2003-07-14 01:22:45 - Mattias Sjögren


>Så även om den kan anropas över appdomain gränserna så har den väl tillhörighet i den appdomainen den skapades i?

Hur skulle den tillhörigheten avspeglas i så fall? Vad vore vitsen med att knyta en tråd till den appdomain den skapas i?


MS


Svara

Sv: En amatör thread fråga

Postades av 2003-07-14 15:15:21 - Johan Normén

Vaddå knytas? den skapas ju under samma appdomän som du befinner dig i, en tråd skapar ju inte direkt en ny varje gång. Skulle ju bli lite krävande då.

//Johan N

"This posting is provided "AS IS" with no warranties, and confers no
rights."


Svara

Sv: En amatör thread fråga

Postades av 2003-07-15 02:00:29 - Mattias Sjögren

Det kanske klarnar om du läser

http://blogs.gotdotnet.com/cbrumme/permalink.aspx/56dd7611-a199-4a1f-adae-6fac4019f11b

Som du ser där hanteras instanser av System.Threading.Thread speciellt av runtimen och tillåts delas av olika appdomains utan att gå via en proxy e.dyl. (det som Brumme kallar "marshal-by-bleed"). Om samma objekt delas i hela processen torde det bli irrelevant vilken appdomain det ursprungligen skapades i, för en referens kan inte som för andra objekt antingen referera till ett lokalt eller ett "remote" objekt.

Och själva den "fysiska" tråden (alltså stacken och allt det där, inte det logiska Thread objektet) kan ju, som jag sa tidigare, löpa över appdomain gränserna, och har därför ingen appdomaintillhörighet.


>"This posting is provided "AS IS" with no warranties, and confers no rights."

Gulligt. Var det någon som trodde något annat?


MS


Svara

Sv: En amatör thread fråga

Postades av 2003-07-15 10:32:14 - Johan Normén

Har alltid fått för mig att trådarna skapas under AppDomänen man är i.
Att det är där ThreadStart utförs.
Och detta ser ju ut att förklara för mig att det är så... Men att de(trådarna) sedan hamnar i processen är ju en annan sak, det har inte jag argumenterat något om. Syftade mer på att de skapades under AppDomänen man var i. (Sedan om de då hamnar i processen är en annan sak.)

Formulerade mig nog lite dåligt i mitt senaste inlägg, då jag var på väg ut, det är mänskligt att göra fel. :-)

"App Domains are not the same as threads nor are they mutually exclusive.
Threads are light-weight processes responsible for multitasking within a
single application. A Thread exists in one app domain at a time, and a
thread can access (and report) which app domain it is executing in. App
domains are used to isolate applications; within an app domain there may be
multiple threads operating at any given moment."
...
"The .NET Framework further subdivides an operating system process into lightweight managed subprocesses, called application domains, represented by System.AppDomain. One or more managed threads (represented by System.Threading.Thread) can run in one or any number of application domains within the same unmanaged process. Although each application domain is started with a single thread, code in that
application domain can create additional application domains and additional threads. The result is that a managed thread can move freely between application domains inside the same unmanaged process; you might have only one thread moving among several application domains."
..

"Gulligt. Var det någon som trodde något annat?"
Skall jag tolka detta stötande? I så fall ber jag dig direkt att lägga av då det
absolut inte är passande här. TACk!
Det är många som klagar på att kodexempel inte fungerar då de gör copy and paste, och det är störande att alltid behöva förklara detta för dem.

//Johan N


Svara

Sv: En amatör thread fråga

Postades av 2003-07-15 18:18:52 - Mattias Sjögren

>Har alltid fått för mig att trådarna skapas under AppDomänen man är i.

Ja naturligtvis skapas de i någon appdomain, men det jag försökte komma fram till var att det för trådar, till skillnad från vanliga objekt, inte har någon egentlig betydelse i vilken.

Men jag tror inte vi kommer längre, så det kanske är dags att släppa det här. :-)


>"Gulligt. Var det någon som trodde något annat?"
>Skall jag tolka detta stötande?

Du får tolka det som du vill, men det var inte tänkt att vara stötande, utan en enkel fråga. Det är ju inte varje dag man ser såna disclaimers i meddelanden här på Pellesoft, och jag undrade bara om du hade nån speciell anledning att ha den där.

Jag kan förstå att Microsoft folk har det. De tillhör trots allt ett hiskeligt stort företag baserat i USA där folk stämmer varandra hit och dit för minsta skitsak. Men för en svensk privatperson ser jag ingen anledning att inkludera sånt juridiksnack.


>Det är många som klagar på att kodexempel inte fungerar då de gör copy and paste, >och det är störande att alltid behöva förklara detta för dem.

Okej, det har jag missat. Men i så fall undrar jag om det inte vore mer effektivt att skriva något på svenska så folk förstår innebörden av det. Kanske något i stil med "skyll inte på mig om koden inte fungerar". :-)


MS


Svara

Sv: En amatör thread fråga

Postades av 2003-07-15 19:04:21 - Johan Normén

Visst kan jag göra det, nu har jag text som jag klistrar in då detta inte är det enda ställe jag är på. Jag vill även se till så det misnas med luft snack här i forumen då det ställs dumma frågor om kod som man klistrat in då de själva bara klistrar in den rakt av. Säger man då till dem lite innan att innehållet inte måste vara helt korrekt så lugnar många ner sig. Plus att det var en kul grej. Och alltid är det någon som skall reta sig i detta land :-) Men jag skall slänga in svenskt text nästa gång. Bara en ren vana att ta med foten o kasta in den.

//Johan N


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 155
27 952
271 704
811
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