Ep. 13 – Clean Code Part 3 (Boundaries, Clean Concurrency)
V tretej časti série Clean Code rozoberáme Boundaries a Clean Concurrency. To znamená, že rozprávame o používaní knižníc tretích strán, o ich testovaní a o tom, ako sa dá čisto písať viac vláknová aplikácia, ako sa správať k vláknam, čo všetko pri tom treba vedieť a ako sa takéto aplikácie dajú testovať.
00:00 – 00:34 Úvod
00:35 – 01:15 Bound aries – úvod
01:16 – 04:30 Príklad – HashMap
04:31 – 06:50 Learning Tests
06:51 – 09:46 Používanie kódu, ktorý ešte neexistuje
09:47 – 10:48 Concurrency – úvod
10:49 – 11:48 Rodiely medzi jedno- a viacvláknovými aplikáciami
11:49 – 14:38 Performance viacerých vlákien
14:39 – 15:30 Viacvláknové programovanie je náročné
15:31 – 17:30 Kritické sekcie by mali byť čo najmenšie
17:31 – 19:07 Používanie klonovaných dát
19:08 – 19:47 Vlákna by mali byť čo najviac nezávislé
19:48 – 21:42 Know your library
21:43 – 22:42 Know your execution models
22:43 – 23:34 Kritické sekcie by mali byť čo najkratšie v2
23:35 – 25:11 Testovanie viacvláknových aplikácií
25:12 – 25:43 Konfigurácia
25:44 – 27:30 Rôzne platformi, rôzny výsledok
27:31 – 28:06 Nereprodukovateľnosť
28:07 – 29:18 Zhrnutie
Boundaries
- Hranice medzi nasim kódom a kódom, nad ktorým nemáme kontrolu
- Zredukovanie nežiadúcej funkcionality
- Learning Tests – namiesto skúšania knižnice si na túto knižnicu napíšeme testy, čím sa naučíme ju používať a zároveň si ju aj otestujeme – Win/Win
- Volania knižnice zaobalíme do vlastnej triedy, aby sme v prípade zmeny museli zasahovať do čo najmenej kódu
- Predchádzajúci bod sa dá využiť aj pri tom, keď ešte nevieme, ako bude kód tretej strany vyzerať
Clean COncurrency
- Concurrency je práca s viacerými vláknami
- Jednovláknové aplikácie sa oveľa jednoduchšie debugujú
- Súbežnosť nie vždy zlepšuje performance
- Má relatívne veľký overhead
- V kritických sekciách mať čo najmenej práce s dátami
- Keď pracujeme s read-only dátami, tak si vieme vytvoriť ich kópie a až tie poslať do vlákien, aby sa neobmedzovali
- Vlákna by mali byť čo najviac nezávislé
- Know your library – možno môj jazyk ponúka lepšie možnosti ako spraviť thread-safe dictionary
- Know your execution models – spoločné zdroje, mutex, vyhľadovanie vlákna, deadlock, livelock, producer-consumer, readers-writers, dining philosophers
- Testovanie viacvláknového kódu je veľký problém
- Kód je potrebné testovať vo viacerých scenáriách – 1 vlákno, 100 vlákien, Mac OS, Windows, spomalovanie
- Na rôznych platformách sa môže viacvláknový kód správať úplne inak