Archiwum | emil@fuse.pl

Przypowieść o otwartych okienkach

Kiedy Indianie chcieli więcej bawolego mięsa, zabijali dwa zwierzęta, zamiast szukać jednego wielkiego. Kiedy w świecie mikroprocesorów wojna megahercowa przygasała na dobre, bo osiągnięto już górną granicę miniaturyzacji, a przyśpieszanie cykli zegara powodowało już tylko efekt cieplny, projektanci sięgneli po asa w rękawie: zwiększono liczbę rdzeni.

Siedziałem na fotelu i rozmawiałem z przyjacielem. W jego pokoju przewalają się góry starych komputerów. Amigi, Commodore’y, Apple jeszcze sprzed ery powrotu Jobsa, a nawet takie wydane chwilę przed jego przepędzeniem. W takim otoczeniu myśli naturalnie zwracają się ku technologicznej przeszłości. Oczywiście ludzie zapatrzeni wstecz, jak my, gloryfikują rzeczy zaszłe i patrzą ze sceptycyzmem na rozwiązania nowe. Tak też dobrneliśmy do tematu „Commodore 64 był gotowy do pracy w sekundę po włączeniu, a mój Mac bootuje się minutę lub dwie”. To jedna z tych dyskusji, że kiedyś Pink Floyd, a teraz tylko biali raperzy znad Wisły — pełna kłamstw, przymykania oka i wybielania przeszłości.

Padło pytanie: mam cztery rdzenie, a mój komputer nie działa cztery razy szybciej, jaki jest sens?

Moje wytłumaczenie było pokrętne, potrzebowałem nawet kartki, żeby narysować kilka strzałek wskazujących prostokąty.

W świecie technologii rzadko rzeczy dodają się jak w matematyce. Indianie wybrali dwa bizony, ale zabicie dwóch bizonów wymaga lepszej organizacji, narzędzi, no i odrobiny szczęścia. Tak samo jest z rdzeniami.

Do wyjaśnienia sytuacji użyjemy mojej podstawowej broni — analogii. Analogie są jak ryby w beczce, stłoczone, niedługo skończy im się tlen i jeszcze ktoś próbuje je zastrzelić z niewiadomego powodu. Moja będzie idealnie niedokładna i podniesie ciśnienie oraz włosy ludziom, którzy odebrali edukację w programowaniu.

Wyobraźmy sobie Urząd. Każdy z czytelników może sobie wybrać dowolny, na myśl o którym cierpnie mu skóra. Urząd ma kolejkę petentów i okienka, w których są obsługiwani.

Na początek mamy kolejkę ludzi z podaniami i jedno otwarte okienko. Petent podchodzi, wyjaśnia sprawę i otrzymuje pieczątkę. Im pracownik okienka lepiej obeznany ze sprawami Urzędu, tym szybciej topnieje kolejka.

Proste.

Po kilku godzinach otwiera się drugie okienko. Ludzie przechodzą więc do tego, które akurat jest wolne. Jaki będzie czas obsługi kolejki? Krótszy o połowę? Tak, ale w sytuacji, kiedy obaj pracownicy Urzędu posiadają tę samą wiedzę. Jeżeli drugie okienko jest obstawione przez praktykanta, który musi skonsultować sprawę co któregoś klienta z literą prawa, przynajmniej jeden z czekających utknie w okienku.

A co się dzieje, jeśli wykładnia prawa nie jest jasna i pracownik drugiego okienka musi co pewien czas zasięgnąć języka u swojego kompetentnego kolegi z okienka pierwszego? Wtedy mamy dwie osoby tupiące nogą. Przy odpowiednio wysokim współczynniku nieszczęścia klientów otwarcie drugiego okienka może dać odwrotne rezultaty, niż pryncypał Urzędu miał na myśli, podejmując decyzje o dołożeniu drugiego rdzenia… czy też pracownika.

Analogia druga.

Oto pudełko puzzli. Ma 2048 elementów. To ładna, okrągła liczba. Układasz je więc i kończysz w n-czas + tyle, ile zajęło Ci dopasowanie tych cholernych kawałków nieba.

Oto drugie pudełko, które zawiera tyle samo elementów. Tym razem masz jeszcze trzech gości, którzy postanowili pomóc Ci w układaniu, ale są strasznymi introwertykami i każdy chce układać w swoim kącie. Na środku leżą wysypane części, a co jakiś czas każdy bierze kilka i próbuje je dopasować do swojego kawałka.

Bez wątpienia zdarzy się, że ktoś podbierze element potrzebny w Twojej części układanki. Jeśli zauważy szybko, że nie ma gdzie wstawić głowy ptaka, zapyta głośno o osobę, która potrzebuje tego właśnie kawałka. Cztery osoby przerwą układanie i po naradzie ptasi dziób trafi w odpowiednie ręce. Kiedy wszyscy skończą, trzeba jeszcze zebrać się razem i dopasować Wasze mniejsze części w całość. Niech bogowie Was chronią, jeśli ktoś spędził zbyt wiele czasu w ubikacji i jest teraz opóźnionu w stosunku do reszty. Trzy czwarte układanki to zero układanki. Czekacie więc, aż maruder Was dogoni.

Chyba że macie gorszy pomysł i dzielicie się pozostałymi kawałkami, próbując mu pomóc. Teraz spowolniliście spowolnienie.

I co z tego?

Tak jak dziewięć kobiet nie urodzi dziecka w miesiąc, tak większa liczba dostępnych rdzeni w Waszym systemie nie będzie magicznie oznaczać przewagi. Wiele problemów w programowaniu stawia solidny opór przed rozbiciem na kawałki, którymi można zająć się indywidualnie i potem zestawić w całość. Już kilka razy w swojej programistycznej karierze próbowałem zmierzyć się z takimi problemami. Zwykle osiągam tylko zwiększoną komplikację i prawie zerową korzyść w szybkości przetwarzania. Może to mówi więcej o moim talencie programistycznym niż o samym problemie, ale nawet bardziej utalentowani ludzie, patrząc na używane zazwyczaj przeze mnie narzędzia, podchodzą do sprawy z pewną rezerwą, a czasem nawet niechęcią.

Czy dobrze jest mieć więcej niż jeden rdzeń? Oczywiście. Nawet najbardziej idiotyczne, jednowątkowe programy zyskają na tym, że te mniej idiotyczne nie muszą się z nimi dzielić czasem. Jednak jak już powinniśmy byli nauczyć się z historii, magia liczb, które wyciągają z kapelusza czarodzieje-marketingowcy, nie zawsze idzie w parze z tym, co możemy osiągnąć.

— Proszę kupić nasz nowy samochód: ma siedem kół, trzy kierownice i zero drzwi, ale kompensuje to bardzo obszerny szyberdach!