DEV: Jak na zamek na databazi?

Stanislav Meduna stano-cznews na meduna.org
Čtvrtek Březen 27 08:16:32 CET 2003


On Wed, 26 Mar 2003 21:39:12 +0000 (UTC), Pavel Kankovsky wrote:

:> Samozrejme su vynimky. Pokial su tie thready pomerne oddelene
:> a komunikuju cez uzke rozhranie (napr. jeden spracovatelsky
:> thread, jeden UI, informacie si posielaju cez nejaku dobre
:> definovanu frontu a inak si navzajom do dat nelezu), tam
:> toho az tolko pokazit nejde.
: 
: To pak lze udelat stejne dobre misto threadu udelat fork(). :)

Na Linuxe v podstate ano, na inych systemoch je ale switch medzi
procesmi stale vyznamne drahsi ako medzi threadmi. Podobne
su medzi threadmi lacnejsie synchronizacne primitivy
(napr. uz spominany pthread_rwlock sice norma pozna tak medzi
threadmi, ako aj medzi procesmi, na linuxe je vsak naimplementovany
len ten prvy).

Problem je v tom, ze je velmi malo vyvojarov, ktori
o paralelnom spracovani nieco skutocne vedia, a to aj z toho
teoretickeho hladiska. Ani ja sa k nim nepocitam - na to
mam v tejto oblasti prilis malo skusenosti.

Typicky programator bud nelockuje nic s ideou, ze "pri ladeni
sa na to pride", alebo naseka extra primitivu okolo kazdeho
zdielaneho objektu a akonahle potrebuje aspon dva take objekty
naraz, zavari si na deadlock. Ostatne vid jadro - presun
od "big kernel lock-u" k niecomu efektivnejsiemu bol a stale
je dost bolestny.

Este horsia situacia nastane, pokial sa k tomu prida nejaka
snaha o realtime - co na klasickom unixe dynamicke priority
obvykle ako-tak vyriesia, v deterministickom planovani
zdochne. Kolko percent vyvojarov rozumie pojmu priority
inversion?

: Privolavat si boleni hlavy z threadu ma smysl prave a pouze v pripade,
: ze se opravdu vyuzije to, ze sdileji jeden pametovy prostor (pripadne
: dalsi veci jako otevrene soubory).

V systemoch, ktore vyvijame vo firme, su thready na nasledovnych miestach:

- sprava dat v zdielanej pamati - tam su treba nejake "upratovacie"
  ulohy, ktore by nebolo rozumne strkat do schedulingu hlavnej
  aplikacie

- low-level komunikacia - tam je treba na niektore veci reagovat
  rychlejsie ako je minimalna doba, po ktoru hlavna aplikacia
  moze trcat v spracovani poziadavky

- jeden clovek sa raz rozhodol urobit inu "databankovu" aplikaciu
  tak, ze kazdy klient ma vlastny thread. Je to uz par rokov
  a ludia ho doteraz idu za to zabit - kym sa to dostalo
  do stavu vhodneho na predaj (o pouzitelnosti ani nehovoriac ;-)),
  vela ludi si trhalo vlasy.

- quick&dirty svinaciny, ktore nikomu neodporucam a radsej
  o nich pomlcim :-)

Zdravi
-- 
                                    Stano



Další informace o konferenci Linux