Próbowałem znaleźć dobrą definicję i zrozumieć, czym tak naprawdę jest wątek .
Wygląda na to, że brakuje mi czegoś oczywistego, ale za każdym razem, gdy czytam o tym, czym jest wątek, jest to prawie okrągła definicja, a la „wątek jest wątkiem wykonania” lub „sposobem na podział na uruchomione zadania”. Uh Co?
Z tego, co przeczytałem, wydaje się, że wątek nie jest tak naprawdę czymś konkretnym, jak proces. W rzeczywistości jest to tylko koncepcja. Z tego co rozumiem z drogi to działa, procesor wykonuje jakieś polecenia dla programu (co zostało nazwane wątku wykonania ), a następnie, gdy jest konieczne, aby przełączyć na przetwarzanie przez jakiś inny program do kawałka, to zapamiętuje stan z program, który obecnie gdzieś wykonuje (Thread Local Storage), a następnie zaczyna wykonywać instrukcje innego programu. I tam iz powrotem. Taki wątek jest tak naprawdę tylko koncepcją „jednej ze ścieżek wykonania” aktualnie uruchomionego programu.
W przeciwieństwie do procesu, który tak naprawdę jest czymś - to skupisko zasobów itp.
Jako przykład definicji, która tak naprawdę niewiele mi pomogła. . .
Z Wikipedii :
„Wątek w informatyce jest skrótem od wątku wykonania. Wątki to sposób, w jaki program dzieli się (określany jako„ podział ”) na dwa lub więcej jednocześnie uruchomionych zadań (lub pseudo jednocześnie). Wątki i procesy różnią się od jednego systemu operacyjnego do innego, ale ogólnie wątek jest zawarty w procesie, a różne wątki w tym samym procesie współużytkują te same zasoby, podczas gdy różne procesy w tym samym wielozadaniowym systemie operacyjnym nie. ”
Więc mam rację? Źle? Czym tak naprawdę jest wątek?
Edycja: Najwyraźniej wątek ma również swój własny stos wywołań, więc jest to coś konkretnego .
źródło
Odpowiedzi:
Wątek to niezależny zestaw wartości rejestrów procesora (dla pojedynczego rdzenia). Ponieważ obejmuje to wskaźnik instrukcji (inaczej Licznik programu), kontroluje to, co wykonuje w jakiej kolejności. Zawiera także wskaźnik stosu, który lepiej wskazywałby unikalny obszar pamięci dla każdego wątku, w przeciwnym razie będą się one wzajemnie zakłócały.
Wątki to jednostka oprogramowania, na którą wpływa przepływ sterowania (wywołanie funkcji, pętla, goto), ponieważ instrukcje te działają na wskaźniku instrukcji i należą do określonego wątku. Wątki są często planowane zgodnie z pewnym schematem ustalania priorytetów (chociaż możliwe jest zaprojektowanie systemu z jednym wątkiem na rdzeń procesora, w którym to przypadku każdy wątek jest zawsze uruchomiony i nie jest wymagane planowanie).
W rzeczywistości wartość wskaźnika instrukcji i instrukcji przechowywanej w tym miejscu jest wystarczająca do ustalenia nowej wartości wskaźnika instrukcji. W przypadku większości instrukcji powoduje to po prostu zwiększenie adresu IP o rozmiar instrukcji, ale instrukcje przepływu sterowania zmieniają adres IP na inne, przewidywalne sposoby. Sekwencja wartości, jaką przyjmuje IP, tworzy ścieżkę wykonania, przeplatając kod programu, dając początek nazwie „wątek”.
źródło
Wątek jest kontekstem wykonania, czyli wszystkimi informacjami potrzebnymi CPU do wykonania strumienia instrukcji.
Załóżmy, że czytasz książkę i chcesz teraz zrobić sobie przerwę, ale chcesz wrócić i wznowić czytanie od momentu, w którym się zatrzymałeś. Jednym ze sposobów osiągnięcia tego jest zanotowanie numeru strony, numeru wiersza i numeru słowa. Zatem twoim kontekstem wykonania dla czytania książki są te 3 liczby.
Jeśli masz współlokatorkę, a ona używa tej samej techniki, może wziąć książkę, gdy ty jej nie używasz, i wznowić czytanie od miejsca, w którym przestała. Następnie możesz go zabrać z powrotem i wznowić z miejsca, w którym byłeś.
Wątki działają w ten sam sposób. Procesor daje złudzenie, że wykonuje wiele obliczeń jednocześnie. Robi to, poświęcając trochę czasu na każde obliczenie. Może to zrobić, ponieważ ma kontekst wykonania dla każdego obliczenia. Podobnie jak możesz udostępnić książkę znajomemu, wiele zadań może współdzielić procesor.
Na poziomie bardziej technicznym kontekst wykonania (a więc wątek) składa się z wartości rejestrów procesora.
Wreszcie: wątki różnią się od procesów. Wątek jest kontekstem wykonywania, podczas gdy proces to wiązka zasobów powiązanych z obliczeniami. Proces może mieć jeden lub wiele wątków.
Wyjaśnienie: zasoby powiązane z procesem obejmują strony pamięci (wszystkie wątki w procesie mają taki sam widok pamięci), deskryptory plików (np. Otwarte gniazda) i poświadczenia bezpieczeństwa (np. Identyfikator użytkownika, który uruchomił proces).
źródło
Aby formalnie zdefiniować wątek, musimy najpierw zrozumieć granice, w których działa wątek.
Program komputerowy staje się procesem, gdy jest ładowany z jakiegoś sklepu do pamięci komputera i rozpoczyna wykonywanie. Proces może być wykonywany przez procesor lub zestaw procesorów. Opis procesu w pamięci zawiera istotne informacje, takie jak licznik programu, który śledzi bieżącą pozycję w programie (tj. Która instrukcja jest aktualnie wykonywana), rejestry, zapasy zmiennych, uchwyty plików, sygnały i tak dalej.
Gwint jest sekwencją takich instrukcji w programu, które mogą być wykonane niezależnie od innych kodów. Rysunek pokazuje koncepcję:
Wątki znajdują się w tej samej przestrzeni adresowej procesu , dlatego wiele informacji obecnych w opisie pamięci procesu może być dzielonych między wątkami.
Niektórych informacji nie można powielić, takich jak stos (wskaźnik stosu do innego obszaru pamięci na wątek), rejestry i dane specyficzne dla wątku. Informacje te wystarczają, aby umożliwić planowanie wątków niezależnie od głównego wątku programu i ewentualnie jednego lub więcej innych wątków w programie.
Do uruchomienia programów wielowątkowych wymagana jest wyraźna obsługa systemu operacyjnego. Na szczęście większość nowoczesnych systemów operacyjnych obsługuje wątki, takie jak Linux (przez NPTL), warianty BSD, Mac OS X, Windows, Solaris, AIX, HP-UX itp. Systemy operacyjne mogą wykorzystywać różne mechanizmy do obsługi wielowątkowości.
Tutaj możesz znaleźć więcej informacji na ten temat. To było także moje źródło informacji.
Pozwólcie, że dodam zdanie z Wprowadzenie do systemu osadzonego autorstwa Edwarda Lee i Seshii :
źródło
Procesy są jak dwie osoby korzystające z dwóch różnych komputerów, które używają sieci do udostępniania danych w razie potrzeby. Wątki są jak dwie osoby korzystające z tego samego komputera, które nie muszą jawnie udostępniać danych, ale muszą ostrożnie zmieniać się.
Koncepcyjnie wątki to po prostu pszczoły wielu robotników, które brzęczą w tej samej przestrzeni adresowej. Każdy wątek ma swój własny stos, swój licznik programów itp., Ale wszystkie wątki w procesie mają tę samą pamięć. Wyobraź sobie, że dwa programy działają jednocześnie, ale oba mają dostęp do tych samych obiektów.
Porównaj to z procesami. Każdy proces ma swoją własną przestrzeń adresową, co oznacza, że wskaźnik w jednym procesie nie może być używany do odwoływania się do obiektu w innym (chyba że używasz pamięci współdzielonej).
Chyba najważniejsze rzeczy do zrozumienia to:
źródło
Mam zamiar użyć dużo tekstu z książki Systemy operacyjne koncepcje ABRAHAMA SILBERSCHATZA, PETERA BAERA GALVINA i GREG GAGNE, a także mojego własnego rozumienia rzeczy.
Proces
Każda aplikacja znajduje się w komputerze w postaci tekstu (lub kodu).
Kiedy uruchamiamy aplikację, tworzymy instancję wykonania. To wystąpienie wykonania nazywa się procesem. EDYCJA: (Zgodnie z moją interpretacją, analogicznie do klasy i instancji klasy, instancja klasy jest procesem).
Przykładem procesów jest Google Chrome. Kiedy uruchamiamy Google Chrome, odradzają się 3 procesy:
Wątek
Aby odpowiedzieć na to pytanie, najpierw powinieneś wiedzieć, czym jest procesor. Procesor to sprzęt, który faktycznie wykonuje obliczenia. EDYCJA: (Obliczenia takie jak dodawanie dwóch liczb, sortowanie tablicy, w zasadzie wykonywanie napisanego kodu)
Teraz przejdźmy do definicji wątku.
EDYCJA: Definicja wątku ze strony internetowej wywiadu:
Tak więc, jeśli proces renderowania z aplikacji Chrome posortuje tablicę liczb, sortowanie odbędzie się według wątku / wątku wykonania. (Gramatyka dotycząca wątków wydaje mi się myląca)
Moja interpretacja rzeczy
Proces jest instancją wykonania. Wątki to faktyczni pracownicy, którzy wykonują obliczenia poprzez dostęp do procesora. Gdy dla procesu działa wiele wątków, proces zapewnia wspólną pamięć.
EDYCJA: Inne informacje, które uznałem za przydatne, aby dać więcej kontekstu
Wszystkie współczesne komputery mają więcej niż jeden wątek. Liczba wątków w komputerze zależy od liczby rdzeni w komputerze.
Przetwarzanie równoległe :
Z Wikipedii:
Mógłbym napisać program, który oblicza sumę 4 liczb:
W programie do obliczenia tej sumy (która będzie jednym procesem uruchomionym na wątku wykonania) mogę rozwidlić inny proces, który może działać na innym wątku do obliczenia (4 + 5) i zwrócić wynik do pierwotnego procesu, podczas gdy oryginalny proces oblicza sumę (1 + 3).
źródło
Niestety wątki istnieją. Wątek jest czymś namacalnym. Możesz zabić jednego, a pozostałe będą nadal działać. Możesz odradzać nowe wątki .... chociaż każdy wątek nie jest własnym procesem, działają one osobno w tym procesie. Na maszynach wielordzeniowych jednocześnie mogą działać 2 wątki.
http://en.wikipedia.org/wiki/Simultaneous_multithreading
http://www.intel.com/intelpress/samples/mcp_samplech01.pdf
źródło
Wątek jest niczym innym jak kontekstem pamięci (lub, jak lepiej ujął to Tanenbaum, grupowaniem zasobów) z regułami wykonywania. To konstrukcja oprogramowania. Procesor nie ma pojęcia, czym jest wątek (niektóre wyjątki tutaj, niektóre procesory mają wątki sprzętowe), po prostu wykonuje instrukcje.
Jądro wprowadza koncepcję wątków i procesów w celu znaczącego zarządzania pamięcią i kolejnością instrukcji.
źródło
To zostało zaczerpnięte z odpowiedzi Yahoo:
Mówiąc prościej, wątki są jednak jak różne „zadania”. Pomyśl więc, kiedy coś robisz, na przykład zapisujesz formułę na jednym papierze. Można to uznać za jeden wątek. Kolejnym wątkiem jest pisanie czegoś innego na innej kartce papieru. Właśnie tutaj pojawia się wielozadaniowość.
Mówi się, że procesory Intel mają „hiperwątkowość” (AMD też to ma) i ma znacznie lepiej wykonywać wiele „wątków” lub wielozadaniowość.
Nie jestem pewien logistyki, w jaki sposób obsługiwany jest wątek. Pamiętam, że procesor chodził między nimi, ale nie jestem tego w 100% pewien i mam nadzieję, że ktoś inny może na to odpowiedzieć.
źródło
Odpowiedź różni się znacznie w zależności od systemu i implementacji, ale najważniejsze są:
Poza tym: wątki mogą być implementowane w jednym procesie przez środowisko wykonawcze języka, wątki mogą być coroutines, wątki mogą być implementowane w jednym procesie przez bibliotekę wątków lub wątki mogą być konstrukcją jądra.
W kilku współczesnych systemach uniksowych, w tym w Linuksie, z którym jestem najbardziej zaznajomiony, wszystko jest wątkami - proces jest jedynie rodzajem wątku, który dzieli stosunkowo niewiele rzeczy z rodzicem (tzn. Otrzymuje własne odwzorowania pamięci, własną tabelę plików i uprawnienia itp.) Czytanie
man 2 clone
, szczególnie lista flag, jest tutaj bardzo pouczające.źródło
Naprawdę nie jestem zadowolony z żadnej z tych odpowiedzi, więc dodam tutaj swoją własną :) Wątek to abstrakcja jądra do planowania pracy nad procesorem, wątek to to, co jądro daje do zarządzania czasem procesora i dzielić się pracą z innymi
źródło
Pozwól mi najpierw wyjaśnić różnicę między procesem a wątkami.
Proces może mieć {1..N} liczbę wątków. Małe wyjaśnienie dotyczące pamięci wirtualnej i procesora wirtualnego.
Pamięć wirtualna
Używany jako przestrzeń wymiany, dzięki czemu proces myśli, że siedzi w pamięci podstawowej w celu wykonania.
Procesor wirtualny
Ta sama koncepcja, co pamięć wirtualna, z wyjątkiem tego, że dotyczy procesora. Procesowi będzie wyglądało, że to jedyna rzecz, która korzysta z procesora.
System operacyjny zajmie się przydzieleniem pamięci wirtualnej i procesora wirtualnego do procesu oraz przeprowadzeniem zamiany między procesami i wykonaniem.
Wszystkie wątki w procesie będą miały tę samą pamięć wirtualną. Ale do każdego wątku zostanie przypisany indywidualny procesor wirtualny, dzięki czemu można je wykonać osobno.
W ten sposób oszczędza się pamięć, a także wykorzystuje procesor do jego potencjału.
źródło