[ Lazar-I @ 15.02.2005. 20:37 ] @
Skinuo sam sa neta knjigu "UNIX® Network Programming", na žalost nisam još pročitao celu. U njoj su dobro objašnjene različite alternative dizajna klijent server aplikacije, a kao primer je dat web server. Web server usluži klijenta i prekida vezu s njim, thread ili proces iz pool-a koji ga je uslužio odlazi na spavanje i spava sve dok se ne pojavi sledeći klijent. Kako bi izgledalo dobro rešenje za server koji treba da opslužuje veliki broj klijenata koji međusobno razmenjuju veliki broj kratkih poruka (neka je saobraćaj intenzivan, veći nego na IRC serveru) pri čemu moraju svo vreme da budu povezani sa serverom? Da li treba da za svakog klijenta postoji poseban thread koji će preuzimati ulaz od njega? Ako imam server koji ima ograničenje da može prihvatiti najviše 1000 klijenata, da li treba da napravim pool sa 1000 niti? Koliko su skupe niti koje spavaju ? Mogle bi se praviti u grupama po potrebi ali zar to ne vraća stvari na pravljenje novih niti pri prijavljivanju klijenta ?
[ filmil @ 15.02.2005. 21:37 ] @
Citat:
odlazi na spavanje i spava sve dok se ne pojavi sledeći klijent. Kako bi izgledalo dobro rešenje za server koji treba da opslužuje veliki broj klijenata koji međusobno razmenjuju veliki broj kratkih
Jedno prilično pametno rešenje za problem resursa i velikog broja niti dao je u doktorskoj tezi Matt Welsh, koga poznajemo po radu na Linux platformi.

f
[ Dragi Tata @ 16.02.2005. 13:09 ] @
To je čuveni C10K problem. U principu, nemaš univerzalan odgovor, već optimalno rešenje zavisi od operativnog sistema. Na Windows serverima (kao i na nekim mainframe OS-ovima) treba koristiti IO Completion Ports.

Možda je dobra ideja da pogledaš ACE - prilično bogatu portabilnu biblioteku za mrežno programiranje - navodno, oni ispod haube koriste optimalno rešenje za svaki OS koji podržavaju. Sa druge strane, ACE je pravi monstrum, pisan u zastarelom C++u, ponekad mi liči na Javu ili C#, hehehe.
[ Lazar-I @ 16.02.2005. 14:12 ] @
Hvala vam na korisnim linkovima.