Programowanie współbieżne.
Możemy uruchamiać wątki i programy w tym samym czasie.
Na przykład weź za przykład matematyczne równanie 3 + 4 + 3 * 2.
Możesz podzielić to na (3 + 4) + (3 * 2).
Nie musisz liczyć tego w kolejności 3 + 4, a następnie obliczyć 3 * 2, możesz obliczyć oba jednocześnie.
Kiedy wykonujesz te obliczenia w tym samym czasie, nazywa się to „wątkiem”. Postaram, pokazać się jak działają wątki.
Wątki
Wątek informatyki jest skrótem od wątku wykonania. Wątki są sposobem na podzielenie programu (nazywanego „dzieleniem”) na dwa lub więcej jednocześnie działających zadań (lub pseudo-zadań). Wątki i procesy różnią się w zależności od systemu operacyjnego, ale na ogół wątek jest zawarty w procesie, a różne wątki w tym samym procesie dzielą te same zasoby, podczas gdy różne procesy w tym samym wielozadaniowym systemie operacyjnym nie.
Wątki Java
Po uruchomieniu programu Java pojedynczy wątek jest zawsze tworzony dla programu.
Twórca może utworzyć nowe wątki.
Podczas konfigurowania wątku należy napisać metodę o nazwie __run () __. Ta metoda określa, co wątek zrobi podczas okresu istnienia wątku.
Wątki można uruchamiać w ramach metody main () i uruchamiać jednocześnie, udostępniając zmienne itp.
Oto kilka rzeczy do zapamiętania. Klasa Worker1 wywodzi się z klasy Thread, jest potomkiem klasy Thread. Praca (co robi) dla tego nowego wątku jest zdefiniowana w metodzie run ().
Wywołanie metody start () widzianej przez runner.start () przydziela pamięć do nowego wątku i powoduje uruchomienie wątku run ().
Tak więc mamy teraz dwa oddzielne wątki działające w tym samym czasie.
Pytanie – co stanie się jako pierwsze? Cóż, właściwie nie wiemy. To zależy od klasy wątków i samego procesora, od tego, co jest uruchamiane jako pierwsze lub czy działa w tym samym czasie.
Pamiętaj, że nigdy nie wywołujemy metody run, zawsze wywołujemy metodę start, która utworzy wątek i zainicjuje go, a następnie ta metoda start wywoła metodę run.
Gdy programujesz możesz mieć tablice wątków, wszystkie działające w tym samym czasie. Możesz mieć tysiące wątków, jeśli chcesz, ale to tworzy złożoność. Nie znamy kolejności, w której może się dziać.
Mimo że programowanie określa i pozwala nam tworzyć wątki, nie określa sposobu uruchamiania wątków.Wzajemne wykluczenie
Nieokreśloność powstaje z powodu możliwego równoczesnego dostępu do zasobu udziału.
Rozwiązaniem jest umożliwienie dostępu do zasobu tylko po jednym wątku, wszystkie pozostałe wątki muszą zostać wykluczone lub muszą czekać.
Bardzo ważne aby w programowaniu współbieżnym wątki się nie wykluczały gdy wątek uzyskuje dostęp do dowolnego zasobu udostępnionego, znajduje się w sekcji krytycznej.
Jednym ze sposobów wymuszenia wzajemnego wykluczenia jest semafor.
Semafory
W prawdziwym życiu semafor to system komunikacji służący do wysyłania wiadomości na przykład z Gdańska do Poznania lub innych miejsc. Jest to system wysyłania i odbierania wiadomości.
W informatyce semafor służy do określenia, czy zasób współdzielony jest używany, czy nie jest używany.
Problemy z synchronizacją
Istnieje wiele znanych problemów, które ilustrują problem programowania współbieżnego. Są używane do sprawdzania poprawności i testowania schematów zsynchronizowanych.
Problem producent-konsument
Problem Producent-konsument jest bardzo powszechną sytuacją, gdy masz producenta (wątek); w prawdziwym życiu może to być sekretarka, która zajmuje się papierkową robotą, z którą należy się uporać. Producent tworzy, produkuje pracę do wykonania.
Istnieje również proces konsumencki, który bierze to wejście i traktuje go w jakiś określony sposób.
Producent i konsument muszą współpracować, a robią to za pomocą bufora pośredniego.
W rzeczywistości może to wyglądać tak:
Sekretarz wkłada przedmiot, do półki na listy
Konsument zabiera list z półki na listy i zajmuje się listami
Musimy się upewnić, że:
Producent nie może wstawiać elementów do bufora, jeśli bufor jest pełny,
Konsument nie może pobrać przedmiotów z bufora, jeśli bufor jest pusty
Bufor nie jest dostępny jednocześnie przez dwa wątki
Pusta wartość boolowska informuje nas, czy bufor jest pusty, czy nie. Dzięki temu mamy pewność, że ​​komputer będzie ładował zmienną za każdym razem, gdy jest testowany.
Ta idea zapętlenia, dopóki sytuacja się nie zmieni, nazywa się zajętym czekaniem, a czasami nazywana jest spinlock. Jest to bardzo skuteczny sposób aby zredukować ilość błędów w trakcie programowania współbieżnego ta metoda jak żadna inna bardzo dobrze pozwala nam na analizę i rozwiązanie problemów z kodem.
W przypadku pojedynczego procesora, jeśli wywołujemy metodę insert (), zostanie ona zapętlona, ​​dopóki bufor nie będzie pusty, ale ponieważ ma jedynie jądro procesora, nikt inny nie może opróżnić bufora, więc jest to nieskończona pętla oczekiwania na inne sygnały.

[Głosów:0    Średnia:0/5]

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here