Co to jest" wątek " (tak naprawdę)?

Próbowałem znaleźć dobrą definicję i zrozumieć, czym naprawdę jest Wątek.

Wydaje mi się, że musi mi brakować czegoś oczywistego, ale za każdym razem, gdy czytam o tym, czym jest wątek, jest to niemal okrągła definicja, a la "wątek to wątek wykonania" lub "sposób na podział na uruchomione zadania". Uh uh. Co?

Z tego co czytałem wynika, że wątek nie jest tak naprawdę czymś konkretnym, jak proces. W rzeczywistości jest to tylko koncepcja. Z tego, co rozumiem, jak to działa, procesor wykonuje pewne polecenia dla programu (który został określony jako Wątek wykonania), a następnie, gdy musi przełączyć się na przetwarzanie dla innego programu, przechowuje Stan programu, który aktualnie wykonuje dla jakiegoś programu (Thread Local Storage), a następnie rozpoczyna wykonywanie instrukcji innego programu. I tam i z powrotem. Taki, że wątek jest tak naprawdę tylko koncepcją " jednej ze ścieżek wykonanie " programu, który jest aktualnie uruchomiony.

W przeciwieństwie do procesu, który naprawdę jest czymś - jest konglomeratem zasobów itp.

Jako przykład definicji, która nie bardzo mi pomogła . . .

From Wikipedia:

" Wątek w informatyce jest skrótem od wątku wykonania. Wątki są sposobem, w jaki program dzieli się na dwa lub więcej uruchomionych jednocześnie (lub pseudo-jednocześnie) zadań. Wątki i procesy różnią się w zależności od systemu operacyjnego, ale generalnie wątek jest zawarty wewnątrz procesu i różne wątki w tym samym procesie dzielą 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?

Edit: najwyraźniej wątek ma również własny stos wywołań, więc jest to nieco konkretna rzecz .

Author: richard, 2011-03-05

12 answers

Wątek jest niezależnym zestawem wartości dla rejestrów procesora (dla pojedynczego rdzenia). Ponieważ zawiera on wskaźnik instrukcji (aka Licznik programów), kontroluje to, co wykonuje w jakiej kolejności. Zawiera również wskaźnik stosu, który lepiej wskazuje na unikalny obszar pamięci dla każdego wątku, w przeciwnym razie będą ze sobą kolidować.

Wątki są jednostką programową podlegającą przepływowi sterowania( wywołanie funkcji, pętla, goto), ponieważ instrukcje te działają na Wskaźnik instrukcji, który należy do określonego wątku. Wątki są często zaplanowane zgodnie z jakimś schematem priorytetyzacji (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 potrzebne planowanie).

W rzeczywistości wartość wskaźnika instrukcji i instrukcji przechowywanej w tym miejscu jest wystarczająca do określenia nowej wartości wskaźnika instrukcji. Dla większości instrukcji, to po prostu postępuje IP według wielkości instrukcji, ale instrukcje sterowania przepływem zmieniają IP w inne, przewidywalne sposoby. Sekwencja wartości, którą przyjmuje IP, tworzy ścieżkę wykonania w kodzie programu, dając początek nazwie "thread".

 111
Author: Ben Voigt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 05:32:52

Wątek jest kontekstem wykonania, czyli wszystkimi informacjami potrzebnymi procesorowi do wykonania strumienia instrukcji.

Załóżmy, że czytasz książkę i chcesz zrobić sobie teraz przerwę, ale chcesz wrócić i wznowić czytanie dokładnie od miejsca, w którym się zatrzymałeś. Jednym ze sposobów, aby to osiągnąć, jest zapisanie numeru strony, numeru linii i numeru słowa. Więc twój kontekst wykonania do czytania książki to te 3 liczby.

Jeśli masz współlokatorkę, a ona jest używając tej samej techniki, może wziąć książkę, gdy jej nie używasz, i wznowić czytanie od miejsca, w którym się zatrzymała. Potem możesz to cofnąć i wrócić tam, gdzie byłeś.

Wątki działają w ten sam sposób. Procesor daje złudzenie, że wykonuje wiele obliczeń w tym samym czasie. Robi to, poświęcając trochę czasu na każde obliczenia. Może to zrobić, ponieważ ma kontekst wykonania dla każdego obliczenia. Tak jak możesz podzielić się książką ze swoim przyjacielem, wiele zadania mogą współdzielić procesor.

Na bardziej technicznym poziomie kontekst wykonania (a więc wątek) składa się z wartości rejestrów procesora.

Last: wątki różnią się od procesów. Wątek jest kontekstem wykonania, podczas gdy proces jest zbiorem zasobów związanych z obliczeniami. Proces może mieć jeden lub wiele wątków.

Wyjaśnienie: zasoby związane z procesem obejmują strony pamięci (wszystkie wątki w procesie mają ten sam widok pamięć), deskryptory plików (np. otwarte gniazda) i poświadczenia bezpieczeństwa (np. ID użytkownika, który rozpoczął proces).

 149
Author: pwnall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-11 17:33:42

Procesy są jak dwie osoby korzystające z dwóch różnych komputerów, które używają sieci do udostępniania danych, gdy jest to konieczne. Wątki są jak dwie osoby korzystające z tego samego komputera, które nie muszą jawnie udostępniać danych, ale muszą ostrożnie na zmianę.

Koncepcyjnie, wątki to po prostu wiele pszczół robotniczych brzęczących w tej samej przestrzeni adresowej. Każdy wątek ma swój własny stos, własny licznik programów itp., ale wszystkie wątki w procesie mają tę samą pamięć. Wyobraź sobie dwa programy działające na w tym samym czasie, ale obie mają dostęp do tych samych obiektów.

Kontrast 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).

Myślę, że najważniejsze rzeczy do zrozumienia To:

  • zarówno procesy, jak i wątki mogą "działać w tym samym czasie".
  • procesy nie współdzielą pamięci (domyślnie), ale wątki współdzielą całą swoją pamięć z innymi wątkami w ten sam proces.
  • każdy wątek w procesie ma swój własny stos i własny wskaźnik instrukcji.
 37
Author: Joey Adams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 18:48:36

Aby formalnie zdefiniować wątek, musimy najpierw zrozumieć granice tego, gdzie wątek działa.

Program komputerowy staje się procesem , gdy jest ładowany z jakiegoś magazynu do pamięci komputera i rozpoczyna wykonywanie. Proces może być wykonany 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 (tzn. która instrukcja jest aktualnie wykonywane), rejestry, magazyny zmiennych, uchwyty plików, sygnały i tak dalej.

A thread jest sekwencją takich instrukcji w programie, które mogą być wykonywane niezależnie od innego kodu. Rysunek przedstawia koncepcję: Tutaj wpisz opis obrazka

Wątki znajdują się w tej samej przestrzeni adresowej procesu, więc wiele informacji obecnych w opisie pamięci procesu może być współdzielonych między wątkami.

Niektóre informacje nie mogą być replikowane, takie jak stos (wskaźnik stosu do innego obszaru pamięci na wątek), rejestry i dane specyficzne dla wątku. ta informacja wystarcza, aby wątki mogły być zaplanowane niezależnie głównego wątku programu i ewentualnie jednego lub więcej innych wątków w programie.

Do uruchamiania 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 (poprzez nptl), warianty BSD, Mac OS X, Windows, Solaris, AIX, HP-UX, itp. Systemy operacyjne mogą wykorzystywać różne mechanizmy implementacji obsługi wielowątkowej.

Tutaj, graficznie, koncepcja jest rapresented.

Tutaj znajdziesz więcej informacji na ten temat. To było również moje źródło informacji.

 30
Author: Leos313,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-29 07:50:33

Zamierzam wykorzystać dużo tekstu z książki systemy operacyjne koncepcje Abrahama SILBERSCHATZA, Petera Baera Galvina i Grega GAGNE wraz z moim własnym zrozumieniem rzeczy.

Proces

Każda aplikacja znajduje się w komputerze w postaci tekstu (lub kodu).

Podkreślamy, że program sam w sobie nie jest procesem. Program jest encja bierna, np. plik zawierający listę instrukcji przechowywanych na dysku (często nazywany wykonywalnym plik).

Kiedy uruchamiamy aplikację, tworzymy instancję wykonania. Ta instancja wykonania nazywa się procesem. EDIT: (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, powstają 3 procesy:

* Proces przeglądarki jest odpowiedzialny za zarządzanie interfejsem użytkownika jako jak dysk i sieci I / O. powstaje nowy proces przeglądarki, gdy Chrome jest uruchomiony. Tworzony jest tylko jeden proces przeglądarki.

procesy Renderer zawierają logikę renderowania stron internetowych. Tak więc, oni zawiera logikę obsługi HTML, Javascript, obrazów i tak dalej. Zasadniczo dla każdej witryny tworzony jest nowy proces renderowania otwarty w nowej karcie, a więc kilka procesów renderujących może być aktywnych w tym samym czasie.

• A plug-in Proces jest stworzony dla każdego typu wtyczki (np. Flash lub QuickTime) w użyciu. Procesy Plug-in zawierają kod do plug-in oraz dodatkowy kod umożliwiający wtyczkę komunikacja z powiązanymi procesami renderującymi i przeglądarką proces.

Wątek

Aby odpowiedzieć na to, myślę, że powinieneś najpierw wiedzieć, co to jest procesor. Procesor jest elementem sprzętowym, który faktycznie wykonuje obliczenia. EDIT: (obliczenia jak dodawanie dwóch liczb, sortowanie tablicy, w zasadzie wykonywanie kodu, który został napisany)

Przejdźmy teraz do definicji wątku.

Wątek jest podstawową jednostką wykorzystania procesora; składa się z ID wątku, programu licznik, zestaw rejestrów i stos.

EDIT: definicja wątku ze strony Intela:

Wątek, lub wątek wykonania, to termin programowy dla podstawowej uporządkowanej sekwencji instrukcji, którą można przekazać lub przetwarzane przez pojedynczy rdzeń PROCESORA.

Tak więc, jeśli proces renderujący z aplikacji Chrome sortuje tablicę liczb, sortowanie będzie miało miejsce w wątku / wątku wykonania. (Gramatyka dotycząca wątków wydaje mi się myląca)

Moja interpretacja rzeczy

Proces jest instancją wykonawczą. Wątki są rzeczywistymi pracownikami, którzy wykonują obliczenia za pomocą dostępu do procesora. Gdy dla procesu działa wiele wątków, proces zapewnia wspólna pamięć.

Edytuj: 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.

Obliczenia Współbieżne :

Z Wikipedii:

Computing Concurrent Computing jest formą obliczeń, w której kilka obliczeń jest wykonywanych w nakładających się okresach czasu-jednocześnie-zamiast sekwencyjnie (jeden ukończony przed kolejnym startem). Jest to właściwość systemu-może to być indywidualny program, komputer lub Sieć-i istnieje oddzielny punkt wykonania lub "wątek sterowania" dla każdego obliczenia ("proces").

Więc mógłbym napisać program, który oblicza sumę 4 liczb:

(1 + 3) + (4 + 5)

W programie aby obliczyć tę sumę (która będzie jednym procesem działającym na wątku wykonania) mogę rozwidlić inny proces, który może działać na innym wątek do obliczenia (4 + 5) i zwrócenia wyniku do oryginalnego procesu, podczas gdy oryginalny proces oblicza sumę (1 + 3).

 22
Author: chatuur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 08:56:43

Niestety wątki istnieją. Nić jest czymś namacalnym. Możesz zabić jednego, a inni nadal będą uciekać. Możesz tworzyć nowe wątki.... chociaż każdy wątek nie jest własnym procesem, działają one oddzielnie wewnątrz procesu. Na maszynach wielordzeniowych 2 wątki mogły działać w tym samym czasie.

Http://en.wikipedia.org/wiki/Simultaneous_multithreading

Http://www.intel.com/intelpress/samples/mcp_samplech01.pdf

 5
Author: Orbit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 05:21:59

ODPOWIEDŹ różni się ogromnie w różnych systemach i różnych implementacjach, ale najważniejsze części to:

  1. wątek ma niezależny wątek wykonania (tzn. można go wyłączyć z kontekstu, a następnie z powrotem, i wznowi działanie tam, gdzie było).
  2. wątek ma czas życia (może być utworzony przez inny wątek, a inny wątek może poczekać na jego zakończenie).
  3. prawdopodobnie ma mniej bagażu niż "proces".

Poza tym: wątki mogą być zaimplementowane w pojedynczym procesie przez środowisko uruchomieniowe języka, wątki mogą być coroutinami, wątki mogą być zaimplementowane w pojedynczym procesie przez Bibliotekę wątków lub wątki mogą być konstrukcją jądra.

W kilku nowoczesnych systemach uniksowych, w tym w Linuksie, z którym jestem najbardziej zaznajomiony, Wszystko jest wątkami - Proces jest tylkotypem wątku, który dzieli stosunkowo niewiele rzeczy ze swoim rodzicem (tzn. otrzymuje własne mapowania pamięci, własną tabelę plików i uprawnienia, itd.) Czytanie man 2 clone, zwłaszcza listy flag, jest tutaj naprawdę pouczające.

 4
Author: hobbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 05:27:53

To zostało zaczerpnięte z Yahoo Answer:

Wątek jest konstrukcją kodującą / align = "left" / podanie. Pojedynczy proces często może zawierać wiele nici. Wątki mogą również bezpośrednio komunikować się ze sobą, ponieważ podziel te same zmienne.

Procesy są wykonywaniem niezależnym jednostki z własnym stanem informacje. Używają też własnych przestrzenie adresowe i mogą współdziałać tylko z innymi procesami poprzez mechanizmy komunikacji międzyprocesowej.

Jednak mówiąc prościej, wątki są 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. Potem kolejny wątek to pisanie czegoś innego na innym kartce papieru. To właśnie tu wkracza wielozadaniowość.

Procesory Intela mają " hyper-threading "(AMD też to ma) i ma być w stanie wykonać wiele "wątków" lub wielozadaniowość znacznie lepiej.

Nie jestem pewien co do logistyki obsługi wątku. Przypominam sobie, że słyszałem o procesorze, który przechodzi między nimi, ale nie jestem tego w 100% pewien i mam nadzieję, że ktoś inny na to odpowie.

 3
Author: Flipper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 05:25:14

Wątek jest niczym innym jak kontekstem pamięci (lub jak to lepiej ujął Tanenbaum, grupowanie zasobów) z regułami wykonywania. To konstrukcja oprogramowania. Procesor nie ma pojęcia, czym jest wątek (tutaj są wyjątki, niektóre procesory mają wątki sprzętowe), po prostu wykonuje instrukcje.

Jądro wprowadza koncepcję wątku i procesu do zarządzania pamięcią i porządkiem instrukcji w znaczący sposób.

 2
Author: Valentin Radu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-13 20:31:49

Nie jestem zadowolony z żadnej z tych odpowiedzi, więc dodam tutaj swoją własną:) wątek jest abstrakcją jądra do planowania pracy na procesorze, wątek jest tym, co daje jądro do zarządzania czasem procesora i dzielenia się pracą z innymi

 -1
Author: Ion Todirel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-03 09:14:22

Pozwól, że najpierw wyjaśnię różnicę między procesem a wątkami.

Proces może mieć {1..N} liczba wątków. Małe wyjaśnienie na temat pamięci wirtualnej i wirtualnego procesora.

Pamięć wirtualna

Używany jako przestrzeń wymiany tak, że proces myśli, że siedzi na podstawowej pamięci do wykonania.

Wirtualny procesor

To samo pojęcie co Pamięć wirtualna, z tym, że dotyczy to procesora. Do procesu, to będzie wyglądać to tylko coś, co korzysta z procesora.

SYSTEM OPERACYJNY zadba o przydzielenie pamięci wirtualnej i wirtualnego procesora procesowi oraz wykonanie wymiany między procesami i wykonanie.

Wszystkie wątki w procesie będą współdzielić tę samą pamięć wirtualną. Ale każdy wątek będzie miał przypisany indywidualny procesor wirtualny, dzięki czemu można go wykonać indywidualnie.

w ten sposób zapisywanie pamięci, jak również wykorzystanie PROCESORA do jego potencjał.

 -1
Author: Balaji Radhakrishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-10 07:28:47

Jeśli chcesz odpowiedzi w języku angielskim, oto co powiedział mi mój nauczyciel, gdy go zapytałem:

" wiesz, że kiedy uruchamiasz program java, uruchamia on program od góry do dołu? Cóż, wątek jest w zasadzie sposobem na obejście tego. Na przykład otwieranie dwóch pól tekstowych naraz lub uruchamianie timera w tym samym czasie, co kilka innych rzeczy."

Przysięgam, że to prawie dokładnie to, co powiedział.

 -3
Author: Rodolfo Beguiristain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-10 19:23:03