Окт. 282009
 

Преди 10 години, когато още бях програмист ( 😉 ), най-яката книга за мен беше Advanced Windows на Jeffrey Richter. Там се обясняват на дълго и на широко „вътрешностите“ на Windows от гледа точка на програмиране. Най-якото за мен беше multi-threaded програмирането и си умирах от кеф да правя някакви неща на много нишки.

При multi-threaded програмирането, основният проблем е синхронизацията между нишките. За да стане добре, програмиста трябва да може да мисли многонишково; да идентифицира критичните секции, евентуалните конфликтни места, и да ги защити. Основно правило е, че текущата нишка може да бъде прекъсната във всеки един момент, между всеки 2 инструкции, и ако работи с глобални данни, да настанат бели. Това важи и на ниво процес, но там има много по-голям шанс да ти се размине, защото обикновено ресурсите са ти доста локални. Да не задълбавам….

При многопотребителските БД имаме същото предизвикателство. За съжаление много програмисти не мислят за това. Някои мислят само за performance. Други и за това не мислят, но пак се отклонявам.

Ще се опитам да направя една серия, в която да покажа такива опасни практики. Честно казано, в момента не ми се занимава да пиша учебникарски примери за левашко управление на транзакции, макар че и такива съм виждал. Ще покажа варианти, които на пръв поглед изглеждат съвсем правилно написани (за нетренирано око). Ще използвам псевдо-код, написан на PL/SQL; но същите принципи важат и на Java, C#, Perl и кой да е друг език.

Между другото, коварното при такива бъгове е, че се проявяват много късно (когато системата се натовари с повечеко потребители). При „стандартно“ тестване всичко си минава – входните данни се преобразуват в изходни. Още по-коварно е, че се проявяват произволно във времето, сякаш напълно случайно, и е адски трудно да се reproduce-нат.

Stay Tuned!

(към част 1)

 Posted by at 8:54

  2 Responses to “Не сме сами, част 0”

  1. Селяндур!

  2. Приятно ми е, Явор 🙂
    Но няма нужда да се представяш, направо кажи както ти тежи…

Sorry, the comment form is closed at this time.