Moja nauka programowania || Tydzień 35
📄

Moja nauka programowania || Tydzień 35

notion image

Coraz więcej osób decyduje się na naukę programowania i wejście do branży IT. Kursy, bootcampy, programy mentoringowe lub samodzielna nauka – tak to zazwyczaj wygląda.

Początkowo skupiamy się na podstawach, takich jak zmienne, pętle czy funkcje, rzadko zagłębiając się w to, jak działa nasz kod “pod maską”. Dopiero przy bardziej zaawansowanych tematach odkrywamy złożone mechanizmy. Pisanie kodu to jedno, ale zrozumienie, co tak naprawdę dzieje się w tle, to zupełnie inna sprawa.

notion image

Jak to działa pod maską?


Czy zastanawiałeś się kiedyś, jak procesor zarządza zadaniami i procesami? Te fundamenty są kluczowe np. podczas nauki wielowątkowości. Nie chodzi tylko o pisanie kodu, ale o zrozumienie, jak to działa na poziomie sprzętu i systemu operacyjnego. Bez tej wiedzy możemy mieć problem ze zrozumieniem tego co robimy. Poznanie tych mechanizmów pozwala również efektywniej wykorzystywać zasoby i optymalizować działanie aplikacji.

notion image

Wielordzeniowość (multicore processing)


Wyobraźmy sobie kuchnię w restauracji. Kuchnia ma wielu kucharzy (rdzenie procesora), a każdy z nich przygotowuje inną potrawę w tym samym czasie. To pozwala restauracji na szybsze wydanie większej liczby potraw, ponieważ wielu kucharzy pracuje równocześnie. Szefem kuchni jest system operacyjny, który musi efektywnie rozdzielać zadania pomiędzy kucharzy (rdzenie), aby żaden z nich nie stał bezczynnie.

Każdy kucharz może pracować nad jednym lub wieloma zadaniami (procesami) naraz. Może jednocześnie kroić warzywa i czuwać nad pieczonym ciastem. Każde z tych zadań (procesów) może być podzielone na mniejsze czynności (wątki), takie jak mieszanie składników, kontrolowanie temperatury piekarnika czy obieranie warzyw. System operacyjny, czyli szef kuchni, zarządza zarówno głównymi zadaniami (procesami), jak i poszczególnymi czynnościami (wątkami), przydzielając je do różnych kucharzy (rdzeni procesora), aby maksymalnie wykorzystać ich umiejętności i czas.

Procesory wielordzeniowe zwiększają wydajność, pozwalając na równoczesne wykonywanie wielu wątków. System operacyjny musi koordynować pracę rdzeni, aby uniknąć przeciążeń i efektywnie zarządzać zasobami, takimi jak pamięć i czas procesora. Dzięki temu komputer może szybciej i bardziej efektywnie wykonywać różnorodne zadania.

notion image

Synchronizacja i blokady


W naszej kuchni pracuje wielu kucharzy. Muszą oni dzielić się składnikami i narzędziami, jak noże i garnki. Gdyby wszyscy próbowali jednocześnie użyć tych samych narzędzi, powstałby chaos. Aby tego uniknąć, szef kuchni ustala zasady, kto i kiedy używa danego narzędzia. W programowaniu wątki stosują mechanizmy synchronizacji, takie jak mutexy i semafory, aby zapewnić bezpieczny i uporządkowany dostęp do współdzielonych zasobów. Dzięki nim unika się konfliktów i zapewnia płynność pracy, podobnie jak w dobrze zorganizowanej kuchni.

Efektywne planowanie zadań


Każdy kucharz musi planować, które potrawy (zadania) gotować najpierw, tworząc harmonogram pracy, aby wszystko było gotowe na czas. Czasami musi przerwać jedno zadanie, aby zacząć inne, zapamiętując, gdzie skończył, by wrócić do niego później. To jak przerwanie krojenia warzyw, aby sprawdzić ciasto w piekarniku. Procesor używa harmonogramu zadań (scheduling) do określenia kolejności wykonywania wątków. Dodatkowo, przełącza kontekst (context switching), zapisując stan bieżącego wątku i ładując stan nowego, co jest kluczowe dla zarządzania wieloma zadaniami.

notion image

Dlaczego to takie ważne?


Zrozumienie, jak komputer (szef kuchni) zarządza zadaniami, pomaga zarówno w nauce, jak i pisaniu lepszego kodu. To jak w gotowaniu – im bardziej zgłębiamy tajniki kuchni, tym bardziej zjawiskowe dania możemy przygotować. Dzięki tej wiedzy nasze programy będą działać płynnie, jak dobrze zorganizowana kuchnia. Wiedząc, jak procesor zarządza wątkami, jesteśmy w stanie pisać bardziej efektywny kod.

notion image

Mój tygodniowy postęp


🚀 Nadal zgłębiam temat wielowątkowości w Javie

🚀 Napisałem testy jednostkowe dla bazy danych w mojej aplikacji

 

Narzędzia i materiały


 

Cele - kolejny tydzień


🚀 Dokończyć naukę podstawowych elementów wielowątkowości