( TCH | 2019. 10. 19., szo – 19:04 )

> Amúgy próbáltál már hibát megtalálni MT szerverben?

Hogyne. Az előző melóhelyemen egy több különféle szerver daemon-t írtam mind szervergépre, mind embeddedre és mind MT volt.

> Napokat el tud vinni, ahelyett, hogy fejlesztenél és valódi munkát végeznél.

Nem tapasztaltam. Egyáltalán nem emlékszem olyan esetre, amikor az MT szívatott volna meg valamivel, pedig a rohamtempós fejlesztések miatt voltak azért bugok. Szerintem csak megfelelő locking kérdése az egész, de nem nevezném magam expertnek a témában, úgyhogy ez csak az én véleményem.

> Eventes cuccokkal az a gond, hogy egy idő után egy istentelen bonyolult állapotgéped lesz, ami totál karbantarthatatlan kódhoz vezet. Sokkal egyszerűbb átlátni egy sima program flow-t.
> Egyszerű dolgokra viszont nagyon jók, ha rengeteg párhuzamos kapcsolatot kell kiszolgálni.

Az eventes megoldások eddig nekem kimaradtak; mindig

select()

-tel szoktam dolgozni, mert a

poll()

ahány rendszer, annyiféle szívás, míg a

select()

mindenütt működik és mindenütt ugyanúgy működik. Viszont nagyon sok baja van, főleg a description set-ek kezelése egy agyrém. Ebből a szempontból a

poll()

ezerszer jobb koncepció, de az összes rendszerben van valami hülye gyíkja és mindegyikben más. :(

> Pl. http alapú dolgot csak úgy érdemes csinálni szerintem, hogy egy event alapú szerver (pl. nginx) fogadja a kéréseket és továbbítja a multi process backendeknek. Ezeknek az összes perzisztenciája valamilyen event alapú szerverben (pl. memcached) vagy/és egy jól skálázódó adatbázisban van.

Ez a második fele már teljesen feladatspecifikus. Pl. statikus filekiszolgálásra minek kellene? Vagy akár sima infopage backendhez. A HTTP csak sima adatközlési protokoll, nem szükségszerűen webszerver.

> fork() (ill. multi process design) hatalmas előnye még, hogy izolálva vannak egymástól a processek címterei

Ez tény, viszont hatalmas hátránya, hogy a teljes process minden cuccát copyzni kell. Egy méretes processnél ez elég komoly overhead, a tanulmány is ezt feszegeti.