Jak programovat client server II
Jan Kasprzak
kas na informatics.muni.cz
Pátek Duben 9 14:33:04 CEST 1999
Veros Kaplan wrote:
: On Thu, 8 Apr 1999, David Flekna wrote:
: : Potrebuji, aby vsechny procesy, ktere vzniknou po pripojeni klientu mohly
: : sdilet urcitou datovou strukturu a to tak, ze kdyz v ni kterykoliv z nich
: : neco zmeni, tak to uvidej i vsichni ostatni. Tusim, ze se asi ptam na
: : trivialni vec, ale nejak se v tom porad nemohu zorientovat. Nevim, jestli by
: : bylo lepsi pouzit na to fork() nebo clone() a jak definovat tu strukturu aby
: : meli do ni vsichni pristup.
:
: Zkuste to udelat bez fork()u. Pro kazde spojeni bude vytvorena stavova
: struktura a program bude jeden velky cyklus, ktery bude select()ovat
: filedeskriptory spojeni a hlavni spojeni. Pri pozadavku na cteni zpracuje
: prichozi data.
: Vyhoda tohoto reseni je, ze nemusite datovou strukturu zamykat,
: neb ji muze menit najednou pouze jedno spojeni. Navic vytvoreni noveho
: procesu je draha zalezitost.
Pod Linuxem ne. Linux ma prave fork() celkem levny.
A co se tyce clone() - to by melo byt asi jen pro autory knihoven.
Pokud thready, a pokud to ma byt aspon trochu prenositelne, doporucuji
POSIX threads (pthread_*), ktere jsou v Linuxu postavene prave nad clone().
: Kdysi jsem zkousel naprogramovat sitove Pexeso, neni to dodelane, ale
: je to pekny priklad na vyse uvedene. Jednoprocesovy server obsluhujici
: vice spojeni.
Tam je problem v tom, ze tento proces nemusi vyuzit ani 100%
casu jednoho CPU - pri operacich zapisu na disk se muze zablokovat.
Pokud by to mel byt jednoprocesovy server, asi by to chtelo pouzit
navic asynchronni IO (coz nevim, v jakem stavu pod Linuxem je).
:
: Druhou moznosti je pouzit SystemV IPC, konkretne sdilenou pamet. To je
: popsane v nejake dokumentaci na www.linux.cz - alespon ja jsem to tam loni
: nasel. Tusim, ze to je Linux Programmers Guide.
:
: A nebo pouzit mmap, pripadne vicevlaknovy server.
mmap() mi prijde jednodussi na programovani, nez SysV SHM.
Navic SHM zustava v pameti i po ukonceni posledniho procesu, coz se mi
nelibi (na druhe strane muze to byt vitana vlastnost).
-Yenya
--
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz> http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz 0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\ Czech Linux Homepage: http://www.linux.cz/ ///
/// I hope AFS dies a slow and painful death with people migrating \\\
// to better alternatives (coda, whatever). --Linus Torvalds \\
Další informace o konferenci Linux