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