C Wątek - czy to co?

Co jest wspólnego z koszulką i programem komputerowym? Oba składają się z wielu strumieni! Podczas gdy nici w koszulce trzymają tkaninę w postaci pojedynczej tkaniny, wątek C (dosłownie "nici" lub "nici") systemu operacyjnego łączy wszystkie programy, aby jednocześnie wykonywać sekwencyjne lub równoległe akcje. Każdy strumień w programie identyfikuje proces, który ma miejsce, gdy system (wątek systemu C) o to poprosi. Optymalizuje pracę tak złożonego urządzenia jak komputera osobistego i wpływa pozytywnie na jego wydajność i wydajność.


Definicja

W informatyce z wątku lub wątku wykonywania jest najmniejszą sekwencją poleceń zarządzanych przez niezależny program planujący, który zwykle jest integralną częścią systemu operacyjnego.
W przypadku strumieni zazwyczaj podaje się pewien priorytet, co oznacza, że ​​niektóre strumienie mają priorytet nad innymi. Gdy procesor zakończy przetwarzanie jednego wątku, może uruchomić następny, czekając na kolejkę. Z reguły oczekiwanie nie przekracza kilku milisekund. Programy komputerowe implementujące "wielowątkowość" mogą wykonywać wiele strumieni jednocześnie. Większość nowoczesnych OS obsługuje wątek z poziomu systemu. Oznacza to, że gdy jeden program próbuje odebrać wszystkie zasoby procesora, system przełącza się na inne programy siłą i zmusza program obsługi procesorów do równomiernego współdzielenia zasobów.


Termin "strumień" (z wątku) może również odnosić się do szeregu powiązanychwiadomości dyskusyjne online. Webowe tablice ogłoszeń składają się z wielu tematów lub gałęzi. Odpowiedzi wysłane w odpowiedzi na oryginalny post są częścią tego samego wątku. W strumieniu wiadomości e-mail wątek może odnosić się do serii odpowiedzi w postaci poleceń "do tyłu" i "do przodu" dotyczących konkretnej wiadomości oraz do struktury drzewa konwersacji.

Wielowątkowe wątki wątku C

W programowaniu komputerowym single-threading jest przetwarzaniem pojedynczego polecenia naraz. Naprzeciwko pojedynczego gwintowania - wielowątkowość. Oba terminy są szeroko stosowane w społeczności programowania funkcjonalnego. Wielowątkowość jest podobna do wielozadaniowości, ale pozwala na obsługę wielu wątków naraz, ale nie kilku procesów. Ponieważ przepływy są mniejsze i sterowane prostszymi instrukcjami, wielowątkowość może również występować w procesach.

Przykłady obsługi narzędzia C Zadania wątku

Wielowątkowy system operacyjny może programować. Wielowątkowość może zapobiec awariom programu i zapobiec awariom na komputerze. Ponieważ każdy strumień jest przetwarzany osobno, błąd jednego z nich nie jest w stanie zakłócić pracy komputera. Tak więc wielowątkowość może doprowadzić do mniejszej liczby awarii w działaniu systemu operacyjnego jako całości.

Wielozadaniowość

Wielozadaniowość obsługuje wiele zadań w trybie równoległym, a także opisuje zasady działania komputera. Procesor może przetwarzać kilka procesów jednocześnie z absolutną precyzją. Jednak procesor wykonuje pewnąoperacje. Do głównych zadań systemu operacyjnego, takie jak kopiowanie plików, nie pozwalają użytkownikowi na wykonywanie innych zadań (otwieranie lub zamykanie okien, na przykład). Nowoczesne systemy operacyjne obejmują pełną obsługę wielozadaniowości - kilka rozwiązań oprogramowania mogą działać jednocześnie bez przeszkadzania sobie nawzajem funkcjonalności. Wielozadaniowość zwiększa również stabilność komputera. technika różni się w zależności od systemu operacyjnego, ale często składnik procesu przepływowego. Jednocześnie kilka strumieni może istnieć w jednym procesie, wykonując i współdzieląc zasoby. W szczególności strumienie C Thread wykorzystują w dowolnym czasie wspólny kod wykonywalny i wartości zmiennych.

zmienna blockSettings3 = {blockID "R-A-70350-3" renderTo "yandex_rtb_R-A-70350-3" asynchroniczny :! 0};

jeżeli (document.cookie.indexOf ("abmatch =") i GT = 0) {
blockSettings3 = {blockID "RA 70350-3" renderTo „yandex_rtb_R A-70350- 3 ", statId: 70350async:! 0};
}

! Zastosowanie (a, b, c, d, e) {A [c] = a [c] || [] do [C] .Push (funkcja () {Ya .Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("scenariusz")jest wykonywane równolegle, każdy rdzeń procesora i wykonywania pojedynczego strumienia równocześnie.

Rodzaje płynie

Planiści Procesy najnowocześniejsze systemy operacyjne bezpośrednio wspierać zarówno czasowe i strumieniowe przetwarzanie wieloprocesorowe, podczas gdy jądro systemu operacyjnego pozwala programistom kontrolować przepływ dostarczenie wymaganych funkcji za pomocą wywołania systemowego. Niektóre realizacja strumieniowe zwane przepływu rdzeń, natomiast lekkie procesy (LWP) - rodzaj strumienia, który ma te same informacje o statusie. Również rozwiązania programowemogą mieć przepływy przestrzeni użytkownika, gdy są używane z zegarami C, sygnałami lub innymi metodami, aby przerwać ich wykonywanie, wykonując rodzaj tymczasowej reklamy ad hoc.

Strumienie i procesy: różnice

Strumienie różnią się od klasycznych procesów wielozadaniowego systemu operacyjnego następującymi cechami:
  • procesy są zwykle niezależne, podczas gdy przepływy istnieją jako podzbiór procesu;
  • procesy przenoszą znacznie więcej informacji niż strumienie;
  • procesy mają dedykowaną przestrzeń adresową;
  • procesy współdziałają tylko poprzez systemowe mechanizmy komunikacyjne;
  • przełączanie kontekstu między wątkami w procesie jest szybsze niż przełączanie kontekstu między procesami.
  • Planowanie prewencyjne i wspólne

    W wieloużytkownikowych systemach operacyjnych wielowątkowość prewencyjna jest szerzej stosowanym podejściem do kontroli czasu wdrożenia poprzez zmianę kontekstu. Niemniej planowanie zapobiegawcze może prowadzić do niekontrolowanych programistów ustalania priorytetów i niepowodzeń. Wręcz przeciwnie, współdzielona wielowątkowość opiera się na wątkach, które odmawiają kontroli wykonania. Może to powodować problemy, jeśli wspólny wielowątkowy przepływ jest blokowany przez oczekiwanie na zasób.

    Ewolucja technologii

    Do początku lat 2000. większość komputerów stacjonarnych posiadała tylko jeden jednordzeniowy procesor, który nie obsługiwał przepływów sprzętowych. W 2002 r. Intel wdrożył obsługę wielowątkowości na procesorzePentium 4 o nazwie Hyper-Threading. W 2005 r. Wprowadzono dwurdzeniowy procesor Pentium D i dwurdzeniowy procesor AMD Athlon 64 X2. Procesory w zintegrowanych systemach o wyższych wymaganiach dla operacji w czasie rzeczywistym są w stanie obsłużyć wielowątkowość, skracając czasy przełączania i wykorzystując dedykowany plik rejestru dla każdego wątku.

    Modele

    Wymieńmy główne modele realizacji. 1: 1 (przepływ na poziomie jądra) - wątki tworzone przez użytkownika w jądrze to najprostsza możliwa implementacja wątków. OS /2 i Win32 używają tego podejścia od samego początku, podczas gdy w bibliotece Linux C Thread join implementuje to podejście poprzez NPTL lub starsze LinuxThreads. Takie podejście jest również używane przez Solaris, NetBSD, FreeBSD, macOS i iOS. N: 1 (interfejs przepływu) - ten model zakłada, że ​​wszystkie strumienie na poziomie aplikacji są mapowane na jeden obiekt docelowy poziomu jądra. Dzięki takiemu podejściu przełącznik kontekstu może zostać wykonany bardzo szybko, a ponadto może zostać zaimplementowany na tych rdzeniach, które nie obsługują przetwarzania strumienia. Jednak jedną z głównych wad jest to, że nie korzysta z akceleracji sprzętowej na procesorach wielowątkowych lub komputerach. Na przykład: jeśli jeden z wątków musi zostać wykonany, gdy żądanie we /wy, cały proces jest blokowany i nie można korzystać z przesyłania strumieniowego. Wyjątek wątku GNU Portable C służy do przetwarzania wątków na poziomie użytkownika. M: N (implementacja hybrydowa) - model reprezentuje określoną liczbę strumieni aplikacji dla niektórych komórek jądra N lub "procesorów wirtualnych". To jest kompromismiędzy wątkami poziomu jądra ("1: 1") a użytkownikiem ("N: 1"). Systemy strumieniowe "M: N" są bardziej złożone, ponieważ trzeba zmienić kod jądra i kod użytkownika. W implementacji M: N biblioteka przetwarzania wątków odpowiada za planowanie przepływów w dostępnych planowanych jednostkach. Dzięki temu kontekst jest najbardziej optymalny, ponieważ pozwala uniknąć wywołań systemowych. Jednakże zwiększa to złożoność i prawdopodobieństwo inwersji, a także nieoptymalne planowanie bez dużej (i kosztownej) koordynacji między planistą środowiska użytkownika a planerem jądra.
    Przykłady implementacji hybrydowej to aktywacja programu planującego wykorzystywana przez wbudowaną implementację biblioteki POSIX NetBSD (dla modelu M: N, w przeciwieństwie do modelu implementacji jądra 1: 1 lub modelu użytkownika przestrzeni). Lekkie procesy używane w starszych wersjach systemu operacyjnego Solaris (zestaw narzędzi Std wątku C).

    Obsługa języka programowania

    Wiele formalnych systemów obsługuje funkcję przesyłania strumieniowego. Implementacja C i C ++ implementuje tę technologię i zapewnia dostęp do własnych interfejsów API dla systemu operacyjnego. Niektóre wysokopoziomowe języki programowania, takie jak Java, Python i .NET Framework, umożliwiają programistom strumieniowym wydzielanie określonych różnic w wykonywaniu wątków w środowisku wykonawczym. Inne rozszerzenia językowe próbują również oddzielić koncepcję równoległości i strumieniowania od programisty. Niektóre języki są przeznaczone do spójnego paralelizmu za pomocą procesorów graficznych.
    Liczba interpretowanych językówposiada implementacje obsługujące przetwarzanie strumieniowe i równoległe, ale nie równoległe wykonywanie wątków z powodu globalnego blokowania interpretera (GIL). GIL jest wykluczającym się wzajemnie blokowaniem przez interpreter, co może zapobiegać jednoczesnej interpretacji kodu programu dla dwóch lub więcej wątków jednocześnie, co ogranicza równoległość w systemach wielordzeniowych. Inne implementacje zinterpretowanych języków programowania, takie jak Tcl, używają rozszerzenia wątku C wątku, co pozwala uniknąć maksymalnego limitu GIL, używając modelu, w którym zawartość i kod muszą być wyraźnie "rozdzielone" między strumieniami. Zorientowane na zdarzenia języki programowania aplikacji, takie jak Verilog i rozszerzenia wątku C, mają inny schemat przepływu, który obsługuje maksymalną liczbę symulacji sprzętu.

    Praktyczne wielowątkowość

    Biblioteki wielowątkowe inicjują wywołanie funkcji w celu wygenerowania nowego strumienia, który przyjmuje wartość funkcjonalną jako parametr. Następnie tworzony jest nowy strumień równoległy i rozpoczyna się przetwarzanie uruchomionej funkcji z kolejnym powrotem. Języki programowania zawierają biblioteki wątków, które zawierają funkcje globalnej synchronizacji, które pozwalają tworzyć i pomyślnie implementować wielowątkowość bez warunków błędu, używając muteksów, zmiennych, krytycznych partycji, monitorów i innych typów synchronizacji.

    Powiązane publikacje