Elmeleti kerdes ki mit gondol errol mik azok a hibak?
Hali tetelezzuk fel hogy van egy "optimalisan" mukodo programunk pl egy "bank" webes feluletrol elerheto, utalasokat tudsz inditani,naplozni tudod a forgalmat,egyenleg stb.
nyilvanvaloan ehhez a hozzaferes regisztraciohoz kotott, es az miert alakul ki, hogy pl80-100 latogatonal egyszeruen elszall az sql, vagy esetleg valami hiba lesz tehat mas funkciot fog csinalni az adott resz, a kod nem valtozik, mi okozza a problemat, hogy lehet rajonni hogy az adott problemat mi okozta es mi az eljeras ilyenkor hogy ez ne forduljon elo stb.
"egyszeruen elszall az sql"
Kicsit pontosabban?
"vagy esetleg valami hiba lesz tehat mas funkciot fog csinalni az adott resz"
Kicsit pontosabban?
Ha párhuzamosan több kérést kell kiszolgálni, akkor előfordulhat, hogy ugyanazt az osztott erőforrást több programszál használná. Ha ez a helyzet nincs normálisan lekezelve, akkor az legtöbbször hibához vezet.
Egy nagyon amatőr példa megmaradva a bank és sql vonalon. Minden banki utalásnak egyedi azonosítóval kell rendelkeznie a DB-ben. Tegyük fel, hogy van egy globális counter. Amikor jön egy új utalás, akkor kiolvasom a counter értékét elmentem az utalás részleteit ezzel az azonosítóval, majd növelem eggyel a countert, hogy a következő utalás is egyedi azonosítót kapjon majd.
Tegyük fel, hogy beérkezik két utalás nagyjából egyszerre.
- Szál1 kiolvassa a counterből X értéket.
- Szál2 kiolvassa a counterből X értéket.
- Szál1 elmenti az utalás adatait X azonosítóval.
- Szál1 növeli a countert (X+1)-re.
- Szál2 megpróbálja elmenteni az utalást, de ilyen azonosító már van a táblában és elszáll hibával.
Ez csak egy típushiba volt, van csomó más pl deadlock, starvation, nem várt értékek a memóriában, ha több szál ugyanazt a memóriaterületet írná, stb.
Rájönni általában úgy lehet, hogy végigköveted a logok alapján mi vezetett a hibás állapothoz. Aztán nézed mellette a kódot és felismered a problémát. Liveness problémák esetén thread dump is segít.
Megoldani meg úgy lehet, hogy az osztott erőforrások konzisztenciáját védeni kell, bizonyos összetett műveleteket atomi lépésként kell kezelni, stb
A fenti példában konkrétan nem szabadna megengedni, hogy másik szál is olvassa a countert, amíg az utolsó szál, amelyik olvasta, nem írta vissza a megnövelt értéket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!