[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] Terminering af tråde



Peter Maersk-Moller wrote:

> Hej Robert
> 
> Jeg regner med at have typisk et par hundrede (max 2 til firetusinde)
> sockets åbne for læsning og skrivning samtidig.

Det er dog ikke så mange, at Linux ikke kan klare det uden de store
modifikationer. Men du skal lige tænke dig lidt om inden du modtager 4T
klienter på en gang. Der vil blive brugt en hel del RAM til Stakken til 4T
klienter.

< <klip>
> En tråd per read() er nok den nemmeste måde at gøre det på, men da skal
> read()-write() helst være blocking af performancehensyn og for nem
> scheduling.

List ældre tekster med klart ok læsning:
http://kegel.com/c10k.html
<link start>
http://www.usenix.org/events/hotos03/tech/full_papers/vonbehren
/vonbehren_html/index.html
</link end>

> Men måske er jeg tvunget til at bruge select(), skønt der vist er nogle
> skaleringsproblemer i at bruge select på et par tusinde sockets samtidig.

Du kunne i så fald bruge tråde med et begrænset antal klienter. Så ville
select virke fint.
 
> Men selv select() er blokeret .. men der er vist en timer på. Så måske
> ved brug af select(), behøver jeg ikke at bruge KillThread.

Yeps... at dræbe er kun sidste udvej !!!

> Men hvad sker der ved at bruge KillThread på en tråd, der er i
> wait-block på read eller write ?

Lad vær med at dræbe en tråd på den måde. Som udgangspunks: lad vær med at
læse noget du ikke med sikkerhed ved er der... du kan komme til at hænge
der rigtig længe !!

> Er der noget med at man kan bruge signal() til at få en blokeret read
> til returnere ... bare uden at der er læst noget og med errno sat ? Vist
> nok til EAGAIN. Hmm man siger vist noget andet, men maaske kunne den
> sætte EINTR ? Ville det være en ide, at låse op for blocking read med
> signal og få dem til at returnerer-exit'te selv ?

Det ved jeg ikke, om det er en god ide. For mig lyder det som et dårligt
design.
 
> Hmm, hvordan er det lige man læser errno, når man har et par tusinde
> blokerede reads eller writes ? errno er jo en fælles variabel for alle
> io-operationer.

ERRNO er særskilt i vær tråd.

> Hvis SIGALRM er brugt til at få read() til at returnere med errno sat
> til EINTR, rejser det et par issues
> 
>    a) Er der kun en read(), der returnerer med errno sat til EINTR per
> SIGALRM eller er det alle måske flere tusinde read(), der returnerer ?

Linux en tråd. 
POSIX hele programmet... eller rettere den tråd der ikke blokerer.


>    b) Hvis read() returnerer -1 med errno sat til EINTR når jeg
> genererer SIGALRM, hvordan sikre man sig, at man kan læse errno inden en
> anden tråds I/O ændrer værdien i errno ?

Se ovenfor.


PS. Måske jeg er lidt sent på den... eller hvad.

(John =;-)


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2008-05-01, 02:01 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *