W mojej krótkiej, acz dynamicznej karierze miałem przyjemność i niekłamaną radochę zagłębiać się w odmęty szaleństwa w towarzystwie baz danych, języków programowania i systemów rozproszonych. Jednak to współbieżność raz na zawsze pozbawiła mnie złudzeń, wpędziła w traumę i zwątpienie.
Jako programiści żyjemy w ułudzie i iluzji, że kod wykonuje się dokładnie tak, jak widzimy go na ekranach. Zapominamy o tym, że wszyscy kłamią: procesory, kompilatory, biblioteki i modele mentalne.
Celem tej prezentacji jest wprowadzenie Was w świat programowania współbieżnego, który – świadomie czy też nie – praktykujecie codziennie.
Wyjdziemy od definicji problemu: dlaczego współbieżnością straszy się młodych programistów i dlaczego większość problemów wynika z faktu, że już mało kto pamięta, jak działają procesory.
Porozmawiamy o consistency i cache coherence, memory hierarchy, a także o liveness, mutual exclusion i atomic operations. Zrozumiemy, jakie ograniczenia wynikają z dominującego modelu opartego na “lockach” i jakie mamy alternatywne modele programowania. Zgłębimy, dlaczego modele pamięci pomagają nam zachować resztki rozsądku i dlaczego sequential consistency jest modelem przyjętym przez większość języków programowania.
Mam nadzieję, że ta prelekcja będzie łagodnym wprowadzeniem w fascynujący świat współbieżności, który de facto jest kluczowy dla zapewnienia wydajności naszych systemów.