• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • Wątek - informatyka

    Przeczytaj także...
    Sekcja krytyczna - w programowaniu współbieżnym fragment kodu programu, w którym korzysta się z zasobu dzielonego, a co za tym idzie w danej chwili może być wykorzystywany przez co najwyżej jeden wątek. System operacyjny dba o synchronizację, jeśli więcej wątków żąda wykonania kodu sekcji krytycznej, dopuszczany jest tylko jeden wątek, pozostałe zaś są wstrzymywane. Dąży się do tego, aby kod sekcji krytycznej był krótki - by wykonywał się szybko. Poprzez ostrożne kontrolowanie, które zmienne są modyfikowane wewnątrz i poza sekcją krytyczną (zwykle poprzez uzyskiwanie dostępu do istotnego stanu tylko z zewnątrz), zapobiega się współbieżnemu dostępowi do tego stanu. Sekcja krytyczna jest zwykle używana kiedy program wielowątkowy musi uaktualnić wiele powiązanych zmiennych, tak żeby inny wątek nie dokonał szkodliwych zmian tych danych. W odnośnej sytuacji, sekcja krytyczna może być użyta ażeby zagwarantować, że wspólny zasób, na przykład drukarka, jest używana tylko przez jeden proces w określonym czasie.Wieloprocesorowy system komputerowy jest systemem komputerowym, w którym do dyspozycji jest więcej niż jeden procesor.
    Przetwarzanie współbieżne (ang. concurrent computing) – przetwarzanie oparte na współistnieniu wielu wątków lub procesów, operujących na współdzielonych danych. Wątki uruchomione na tym samym procesorze są przełączane w krótkich przedziałach czasu, co sprawia wrażenie, że wykonują się równolegle.

    Wątek (ang. thread) – część programu wykonywana współbieżnie w obrębie jednego procesu; w jednym procesie może istnieć wiele wątków.

    Różnica między zwykłym procesem a wątkiem polega na współdzieleniu przez wszystkie wątki działające w danym procesie przestrzeni adresowej oraz wszystkich innych struktur systemowych (np. listy otwartych plików, gniazd itp.) – z kolei procesy posiadają niezależne zasoby.

    Ta cecha ma dwie ważne konsekwencje:

    Bezpieczeństwo wątków w programowaniu współbieżnym jest pojęciem stosowanym w kontekście programów wielowątkowych. Fragmenty kodu są "wątkowo-bezpieczne" (ang. thread-safe), jeżeli funkcje wywoływane jednocześnie przez wiele wątków wykonują się prawidłowo. W szczególności musi być spełniony następujący warunek: współbieżne wątki mają dostęp do tych samych współdzielonych danych oraz dostęp do fragmentu współdzielonych danych jest możliwy dla dokładnie jednego wątku w danym czasie.Green thread (ang. "zielony wątek") − wątek, który jest tworzony obsługiwany przez maszynę wirtualną, w odróżnieniu od wątków natywnych danego systemu operacyjnego. Zielone wątki emulują środowisko wielowątkowe niezależnie od możliwości systemu, na którym zostały uruchomione. Są zarządzane w przestrzeni użytkownika a nie jądra systemu, przez co mają możliwość pracy w środowiskach, które nie wspierają wątków.
    1. Wątki wymagają mniej zasobów do działania i też mniejszy jest czas ich tworzenia.
    2. Dzięki współdzieleniu przestrzeni adresowej (pamięci) wątki jednego zadania mogą się między sobą komunikować w bardzo łatwy sposób, niewymagający pomocy ze strony systemu operacyjnego. Przekazanie dowolnie dużej ilości danych wymaga przesłania jedynie wskaźnika, zaś odczyt (a niekiedy zapis) danych o rozmiarze nie większym od słowa maszynowego nie wymaga synchronizacji (procesor gwarantuje atomowość takiej operacji).

    Wątki są udostępniane wprost przez system operacyjny MS Windows, w systemach Linux, BSD i innych dostępna jest biblioteka pthread, dająca jednolity interfejs, ukrywający szczegóły implementacji. W językach programowania używających maszyn wirtualnych (Python, Java itp.) są dostępne również tzw. zielone wątki, które nie są obsługiwane przez system operacyjny, ale samą maszynę wirtualną – to pozwala m.in. na realizację współbieżności nawet wtedy, gdy docelowy system operacyjny nie udostępnia wątków.

    Procesor (ang. processor), także CPU (ang. Central Processing Unit) – urządzenie cyfrowe sekwencyjne, które pobiera dane z pamięci, interpretuje je i wykonuje jako rozkazy. Wykonuje on ciąg prostych operacji (rozkazów) wybranych ze zbioru operacji podstawowych określonych zazwyczaj przez producenta procesora jako lista rozkazów procesora.Wielozadaniowość – cecha systemu operacyjnego umożliwiająca mu równoczesne wykonywanie więcej niż jednego procesu. Zwykle za poprawną realizację wielozadaniowości odpowiedzialne jest jądro systemu operacyjnego.

    Brak synchronizacji między wątkami[]

    W systemach wieloprocesorowych, a także w systemach z wywłaszczaniem, wątki mogą być wykonywane równocześnie (współbieżnie). Równoczesny dostęp do wspólnych danych grozi jednak utratą spójności danych i w konsekwencji błędem działania programu.

    POSIX Threads (wątki POSIX, pthreads) – specyfikacja wchodząca w skład standardu POSIX określająca implementację wielowątkowości, która obejmuje podstawowe mechanizmy zarządzania wątkami, obiektami synchronizującymi oraz definiuje jednolity interfejs programistyczny dla języka C. Standard definiuje pewien podstawowy zestaw funkcji oraz szereg opcji, które mogą być udostępnione przez implementację.Proces – jedno z podstawowych pojęć w informatyce, definiowane jako egzemplarz wykonywanego programu. Każdy nowo powstały proces otrzymuje unikatowy numer, który go jednoznacznie identyfikuje, tzw. PID (od (ang.) process identifier).

    Podręcznikowy przykład: ciąg instrukcji odczyt-zmiana-zapis.

    Załóżmy że program ma dane do przetwarzania, umieszczone w N pierwszych komórkach tablicy X. Liczba N zapisana jest w odpowiedniej zmiennej. Algorytm przetwarzania mógłby wyglądać następująco:

    1. odczytaj zmienną N i sprawdź, czy jest równa 0
    2. jeśli tak (nie ma danych w X), przejdź do kroku 7.
    3. (tu wchodzimy, gdy N równe 1 lub więcej) odczytaj wartość X[N]
    4. zmniejsz wartość N o 1 (zaznacz, że N-ta dana została już zabrana)
    5. zrób coś z tą odczytaną daną (tu następuje właściwe przetwarzanie)
    6. (dana obsłużona – zajmij się następną) przejdź do kroku 1.
    7. (koniec pracy)

    Jest to najprostsza pętla opróżniająca stos X. W środowisku jednowątkowym działa zgodnie z oczekiwaniami, przetwarzając kolejno dane X[N], X[N-1], itd. aż do X[1], po czym zatrzymuje się z zerową wartością zmiennej N.

    Przestrzeń adresowa to mapa możliwej do zaadresowania przez proces pamięci. Nie cały jej obszar musi mieć swój odpowiednik w pamięci fizycznej, co jest implementowane za pomocą pamięci wirtualnej. W skład przestrzeni adresowej procesu wchodzą najczęściej:Algorytmy wzajemnego wykluczania (w skrócie często nazywane mutex, z ang. mutual exclusion) są używane w przetwarzaniu współbieżnym w celu uniknięcia równoczesnego użycia wspólnego zasobu (np. zmiennej globalnej) przez różne wątki/procesy w częściach kodu zwanych sekcjami krytycznymi. Sekcja krytyczna jest fragmentem kodu, w którym wątki (lub procesy) odwołują się do wspólnego zasobu. Sama w sobie nie jest ani mechanizmem, ani algorytmem wzajemnego wykluczania. Program, proces lub wątek może posiadać sekcje krytyczne bez mechanizmów czy algorytmów implementujących wzajemne wykluczanie.

    Jednak w środowisku wielowątkowym dwa równoczesne wątki mogą wykonać się w taki sposób (załóżmy N=2):

    Jak widać, oba wątki pobrały do przetwarzania tę samą daną X[2]. Jeśli nasz program jest systemem księgowym, a w X[2] było zapisane "dokonaj przelewu kwoty xxxx z rachunku nnnn na rachunek mmmm", to przelew zostanie zaksięgowany dwukrotnie.

    W dalszym ciągu wykonania tego samego programu możliwy jest również inny przypadek. Przypuśćmy, że wątek nr 1 wolniej przetwarzał X[2] i teraz wątek nr 2 zaczyna kolejny cykl:

    Python – język programowania wysokiego poziomu ogólnego przeznaczenia i rozbudowanym pakiecie bibliotek standardowych, którego ideą przewodnią jest czytelność i klarowność kodu źródłowego. Jego składnia cechuje się przejrzystością i zwięzłością.Algorytm – w matematyce skończony ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Słowo "algorytm" pochodzi od starego angielskiego słowa algorism, oznaczającego wykonywanie działań przy pomocy liczb arabskich (w odróżnieniu od abacism – przy pomocy abakusa), które z kolei wzięło się od nazwiska, które nosił Muhammad ibn Musa al-Chuwarizmi (أبو عبد الله محمد بن موسى الخوارزمي), matematyk perski z IX wieku.

    Pomimo posłużenia się licznikiem N wątek nr 1 usiłuje pobrać nieistniejący element danych spod nielegalnego indeksu – X[0]. W zależności od różnych czynników spowoduje to natychmiastowe awaryjne przerwanie działania programu albo dowolne, nieprzewidywalne zaburzenia (błędy) w dalszym jego działaniu.

    BSD (ang. Berkeley Software Distribution, czasami nazywany Berkeley Unix) – odmiana systemu operacyjnego Unix wywodząca się ze stworzonych na Uniwersytecie Kalifornijskim Berkeley rozszerzeń dla systemu rozwijanego przez firmę AT&T. Także potoczna nazwa licencji BSD, na której te systemy są wydawane oraz pokrewnych licencji tego typu (np. licencja MIT).Definicja intuicyjna: Java (wym. „dżawa”) to język programowania. Programy napisane w Javie można uruchamiać na wielu urządzeniach, takich jak telefony komórkowe lub komputery oraz pod różnymi systemami operacyjnymi, przy użyciu Wirtualnej maszyny Javy, która musi być w danym środowisku zainstalowana.

    Do zapobiegania takim sytuacjom wykorzystuje się mechanizmy synchronizacji wątków: semafory, muteksy, sekcje krytyczne.

    Zobacz też[]

  • wielowątkowość
  • wielozadaniowość
  • bezpieczeństwo wątków



  • w oparciu o Wikipedię (licencja GFDL, CC-BY-SA 3.0, autorzy, historia, edycja)

    Warto wiedzieć że... beta

    Semafor – chroniona zmienna lub abstrakcyjny typ danych, który stanowi klasyczną metodę kontroli dostępu przez wiele procesów do wspólnego zasobu w środowisku programowania równoległego. Semafory zostały po raz pierwszy opisane przez Edsgera Dijkstrę jako istotne rozwinięcie algorytmu Dekkera.
    Wielowątkowość (ang. multithreading) – cecha systemu operacyjnego, dzięki której w ramach jednego procesu może wykonywać kilka zadań lub jednostek wykonawczych. Nowe zadania to kolejne ciągi instrukcji wykonywane oddzielnie. Wszystkie zadania w ramach tego samego procesu współdzielą kod programu i dane.
    Implementacja (wdrożenie, przystosowanie, realizacja, łac.ang. implementation) – w informatyce – proces przekształcania abstrakcyjnego opisu systemu lub programu na obiekt fizyczny: komputer lub działający program zapisany w konkretnym języku programowania; także obiekt fizyczny będący efektem takiego przekształcenia, np. implementacja systemu operacyjnego (wdrożenie systemu) lub kompilatora dla konkretnego typu komputera.

    Reklama

    Czas generowania strony: 0.066 sek.