[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: [CPROG] asynkron I/O (poll()?)



Elias Naur <sslug@sslug> writes:

> Når man læser forskellige benchmarks for servere, får jeg den opfattelse at 
> asynkron I/O er den "eneste rigtige" måde at lave en server på hvis man 
> skal have _mange_ klienter.  Og der skulle poll så være systemkaldet til 
> den slags.  Men så er spørgsmålet: hvor finder man information om hvordan 
> man implementerer poll i sin server, og om de overhovedet har ret i alle 
> tilfælde.  

Tja, hvis du bruger poll/select har du har typisk en loop som siger:

find ud af hvilke file descriptors vi venter på input fra
kald select()/poll() for at finde ud om der er noget aktivitet på dem
 her kan du enten vente i fx 1 sekund ELLER indtil der er data klar
løb igennem alle dem der er input på
lav evt. noget andet (fx noget du skal udføre med visse intervaller)
send al det output du har bufferet ovenover

goto 1

Her er noget om sockets:

http://www.ecst.csuchico.edu/~beej/guide/net/

Eller se også unix socket faq.

Men! Hvad man typisk forstår ved async io er io hvor kernen kalder dig
når der er noget klart. Fx kan du få et signal når der er data klar på
en socket. poll/select er "nonblocking" IO.

Når du bruger poll(), så skal du sætte nogle strukturer op som bliver
sat op med data om hvor der var data klar. Altså hvis du skulle lave
en poll() på 100000 forbindelser, skal du checke efter poll()
returnerer hvilke der har data klar. Det betyder også at kernen skal
bruge en del tid på at checke det data du giver den.

Så har du brug for fx 10000 samtidige klienter skulle du måske se på
det her i stedet for:

http://www.kegel.com/c10k.html


PS: 1 minuts stilhed for Dansk Data Elektronik aka eHuset, engang
Danmarks fornemste UNIX-hus :()

-- 
===============================================================
<sslug@sslug>     Herlev, Denmark     Software Designer
<URL:http://www.andreasen.org/>   <*>   Eicon Networks Research
===============================================================



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:08 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] *