Jaka jest różnica między procesem a wątkiem?

Jaka jest techniczna różnica między procesem a wątkiem?

Mam wrażenie, że słowo "Proces" jest nadużywane i są też wątki sprzętowe i programowe. A co z lekkimi procesami w językach takich jak Erlang ? Czy istnieje ostateczny powód, aby używać jednego terminu nad drugim?

Author: NAND, 2008-10-14

30 answers

Zarówno procesy jak i wątki są niezależnymi sekwencjami wykonania. Typowa różnica polega na tym, że wątki (tego samego procesu) działają w przestrzeni pamięci współdzielonej, podczas gdy procesy działają w oddzielnych przestrzeniach pamięci.

Nie jestem pewien, do jakich wątków "hardware" vs "software" możesz się odnosić. Wątki są funkcją środowiska operacyjnego, a nie funkcją procesora (chociaż procesor zwykle ma operacje, które sprawiają, że wątki są wydajne).

Erlang używa terminu "proces", ponieważ nie ujawnia modelu wieloprogramowania pamięci współdzielonej. Nazywanie ich "wątkami" oznaczałoby, że mają wspólną pamięć.

 1550
Author: Greg Hewgill,
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-15 17:28:45

Proces
Każdy proces zapewnia zasoby potrzebne do wykonania programu. Proces ma wirtualną przestrzeń adresową, kod wykonywalny, otwarte uchwyty dla obiektów systemowych, kontekst bezpieczeństwa, unikalny identyfikator procesu, zmienne środowiskowe,klasę priorytetu, minimalne i maksymalne rozmiary roboczych zestawów oraz co najmniej jeden wątek wykonania. Każdy proces rozpoczyna się pojedynczym wątkiem, często zwanym wątkiem głównym, ale może tworzyć dodatkowe wątki z dowolnego z jego nici.

Wątek
Wątek jest podmiotem w procesie, który może być zaplanowany do wykonania. Wszystkie wątki procesu współdzielą jego wirtualną przestrzeń adresową i zasoby systemowe. Ponadto każdy wątek zachowuje procedury obsługi wyjątków, priorytet harmonogramowania, lokalną pamięć wątku, unikalny identyfikator wątku i zestaw struktur, których system będzie używał do zapisywania kontekstu wątku do czasu jego zaplanowania. Kontekst wątku zawiera zestaw rejestrów maszynowych wątku, jądro stos, blok środowiska wątku i stos użytkownika w przestrzeni adresowej procesu wątku. Wątki mogą również mieć własny kontekst bezpieczeństwa, który może być używany do podszywania się pod klientów.


Ta informacja została znaleziona w Microsoft Docs tutaj: o procesach i wątkach

Microsoft Windows obsługuje wielozadaniowość prewencyjną, która tworzy efekt jednoczesnego wykonywania wielu wątków z wielu procesów. Na komputer wieloprocesorowy, system może jednocześnie wykonywać tyle wątków, ile jest procesorów na komputerze.

 853
Author: Scott Langham,
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
2020-05-26 11:09:44

Proces:

  • wykonująca instancję programu nazywana jest procesem.
  • niektóre systemy operacyjne używają terminu "zadanie" w odniesieniu do wykonywanego programu.
  • Proces jest zawsze przechowywany w pamięci głównej, określanej również jako pamięć pierwotna lub pamięć o dostępie losowym.
  • dlatego Proces jest określany jako aktywny podmiot. Znika po ponownym uruchomieniu maszyny.
  • kilka procesów może być powiązanych z tym samym programem.
  • On a system wieloprocesorowy, wiele procesów może być wykonywanych równolegle.
  • W systemie uniprocesorowym, choć nie osiągnięto prawdziwej równoległości, stosuje się algorytm szeregowania procesów, a procesor jest zaplanowany do wykonania każdego procesu po kolei, dając złudzenie współbieżności.
  • Przykład: wykonywanie wielu instancji programu 'Calculator'. Każda z instancji jest określana jako proces.

Wątek:

  • wątek jest podzbiór procesu.
  • jest określany jako "lekki proces", ponieważ jest podobny do prawdziwego procesu, ale wykonuje w kontekście procesu i dzieli te same zasoby przydzielone procesowi przez jądro.
  • Zwykle proces ma tylko jeden wątek sterowania – Jeden zestaw instrukcji maszynowych wykonujących na raz.
  • proces może również składać się z wielu wątków wykonania, które wykonują instrukcje jednocześnie.
  • wiele wątków sterowania może wykorzystaj prawdziwą równoległość możliwą w systemach wieloprocesorowych.
  • w systemie uni-procesor, algorytm harmonogramowania wątków jest stosowany i procesor jest zaplanowany do uruchomienia każdego wątku po kolei.
  • Wszystkie wątki uruchomione w procesie mają tę samą przestrzeń adresową, deskryptory plików, stos i inne atrybuty związane z procesem.
  • ponieważ wątki procesu dzielą tę samą pamięć, synchronizacja dostępu do udostępnionych danych w procesie zyskuje bezprecedensowy znaczenie.

Pożyczyłem powyższe info z poszukiwanie wiedzy! blog.

 315
Author: Kumar,
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-07-09 08:46:09

Najpierw przyjrzyjmy się aspektowi teoretycznemu. Musisz zrozumieć, czym jest proces koncepcyjnie, aby zrozumieć różnicę między procesem a wątkiem i co jest między nimi dzielone.

Mamy następujący w sekcji 2.2.2 klasyczny model wątku znowoczesnych systemów operacyjnych 3e autorstwa Tanenbauma:

Model procesu oparty jest na dwóch niezależnych koncepcjach: zasobach grupowanie i wykonywanie. Czasami warto je oddzielić; to jest gdzie wkraczają nici....

Kontynuuje:

Jednym ze sposobów patrzenia na proces jest to, że jest to sposób na grupa powiązanych zasobów razem. Proces ma przestrzeń adresową zawierające tekst programu i dane, a także inne zasoby. Te zasób może zawierać otwarte pliki, procesy potomne, oczekujące alarmy, obsługa sygnałów, informacje księgowe i wiele innych. Umieszczając je razem w formie procesu można nimi łatwiej zarządzać. Inną koncepcją procesu jest wątek wykonania, Zwykle skrócony do tylko wątku. Wątek posiada licznik programu, który utrzymuje śledzenie, którą instrukcję należy wykonać dalej. Posiada rejestry, które przytrzymaj jego bieżące zmienne robocze. Posiada stos, który zawiera historii wykonania, z jedną ramką dla każdej wywołanej procedury, ale nie ale wrócił z. Chociaż wątek musi wykonać w jakimś procesie, wątek i jego proces są różnymi pojęciami i mogą być traktowane osobno. Procesy służą do grupowania zasobów razem; wątki czy jednostki są zaplanowane do wykonania na CPU.

Dalej podaje następującą tabelę:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Zajmijmy się problemem wielowątkowości sprzętowej . Klasycznie procesor obsługiwałby pojedynczy wątek wykonania, zachowując stan wątku za pomocą pojedynczego licznika programu (PC) i zestawu rejestrów. Ale co się dzieje, gdy brakuje pamięci podręcznej? Pobieranie danych z pamięci głównej zajmuje dużo czasu, a podczas gdy to dzieje procesor po prostu siedzi bezczynnie. Więc ktoś wpadł na pomysł, aby w zasadzie mieć dwa zestawy stanu wątku (PC + rejestry), aby inny wątek (może w tym samym procesie, może w innym procesie) mógł wykonać pracę, podczas gdy drugi wątek czeka na głównej pamięci. Istnieje wiele nazw i implementacji tego pojęcia, takich jak Hyper-threading i jednoczesne wielowątkowość (W skrócie SMT).

Teraz spójrzmy na stronę oprogramowania. Są zasadniczo trzy sposoby implementacji wątków po stronie oprogramowania.

  1. wątki przestrzeni użytkownika
  2. wątki Jądra
  3. kombinacja tych dwóch

Aby zaimplementować wątki, wystarczy możliwość zapisania stanu procesora i utrzymania wielu stosów, co w wielu przypadkach może być wykonane w przestrzeni użytkownika. Zaletą wątków przestrzeni użytkownika jest super szybkie przełączanie wątków, ponieważ nie musisz pułapkować jądra i możliwość planowania wątków tak jak lubisz. Największą wadą jest niemożność blokowania We/Wy (co zablokowałoby cały proces i wszystkie jego wątki użytkownika), co jest jednym z głównych powodów, dla których używamy wątków w pierwszej kolejności. Blokowanie we / wy za pomocą wątków znacznie upraszcza projektowanie programów w wielu przypadkach.

Wątki jądra mają tę zaletę, że mogą używać blokowania We/Wy, oprócz pozostawienia wszystkich problemów z harmonogramem w systemie operacyjnym. Ale każdy przełącznik wątku wymaga zalewkowania w jądrze, które jest potencjalnie stosunkowo wolno. Jednakże, jeśli przełączasz wątki z powodu zablokowanego wejścia / wyjścia, nie jest to tak naprawdę problem, ponieważ operacja wejścia/Wyjścia prawdopodobnie uwięziła cię już w jądrze.

Innym podejściem jest połączenie tych dwóch, z wieloma wątkami jądra, z których każdy ma wiele wątków użytkownika.

Wracając więc do kwestii terminologii, widać, że proces i wątek wykonania to dwie różne koncepcje, a wybór terminu zależy od tego, jakiego użyjesz o czym ty mówisz. Jeśli chodzi o termin "lekki proces", osobiście nie widzę w tym sensu, ponieważ tak naprawdę nie oddaje tego, co się dzieje, a także terminu "wątek wykonania".
 143
Author: Robert S. Barnes,
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
2020-07-07 11:05:49

Aby wyjaśnić więcej w odniesieniu do programowania współbieżnego

  1. Proces posiada samodzielne środowisko wykonawcze. Proces zwykle ma kompletny, prywatny zestaw podstawowych zasobów czasu pracy; w szczególności każdy proces ma własną przestrzeń pamięci.

  2. Wątki istnieją wewnątrz procesu - każdy proces ma co najmniej jeden. Wątki dzielą zasoby procesu, w tym pamięć i otwarte pliki. To sprawia, że skuteczne, ale potencjalnie problematyczne, komunikacja.

Przykład mający na uwadze przeciętnego człowieka:

Na komputerze otwórz Microsoft Word i przeglądarkę internetową. Nazywamy te dwa procesy .

W programie Microsoft Word wpisujesz coś, a to zostanie automatycznie zapisane. Teraz zauważyłeś, że edycja i zapisywanie odbywa się równolegle-edycja w jednym wątku i zapisywanie w drugim wątku.

 117
Author: Reachgoals,
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
2020-07-07 10:37:16

Aplikacja składa się z jednego lub więcej procesów. Proces, najprościej mówiąc, jest programem wykonującym. Jeden lub więcej wątków działa w kontekście procesu. Wątek jest podstawową jednostką, której system operacyjny przydziela czas procesora. Wątek może wykonać dowolną część kodu procesu, łącznie z częściami aktualnie wykonywanymi przez inny wątek. Włókno jest jednostką wykonania, która musi być ręcznie zaplanowana przez aplikację. Włókna działają w kontekście wątków to ich zaplanuj.

Skradzione z tutaj .

 53
Author: Node,
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
2008-10-14 09:16:13

Proces jest zbiorem kodu, pamięci, danych i innych zasobów. Wątek jest sekwencją kodu wykonywaną w ramach procesu. Możesz (zazwyczaj) mieć wiele wątków wykonujących się jednocześnie w ramach tego samego procesu.

 31
Author: Gerald,
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
2008-10-14 09:30:19

Przykład świata rzeczywistego dla procesu i wątku to da Ci podstawowe pojęcie o wątku i procesie Tutaj wpisz opis obrazka

pożyczyłem powyższe informacje z odpowiedzi Scotta Langhama - dzięki

 29
Author: Ratheesh,
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-06 23:24:18
  • każdy proces jest wątkiem (wątkiem głównym).
  • ale każdy wątek nie jest procesem. Jest to część (podmiot) procesu.
 24
Author: karthikeyan_somu,
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-05-04 19:42:49

Proces:

  1. Proces jest procesem o dużej wadze.
  2. Proces jest oddzielnym programem, który ma oddzielną pamięć,dane, zasoby itp.
  3. procesy są tworzone za pomocą metody fork ().
  4. przełączanie kontekstu między procesem jest czasochłonne.

Przykład:
Powiedzmy, otwarcie dowolnej przeglądarki (mozilla, Chrome, IE). W tym momencie rozpocznie się wykonywanie nowego procesu.

Wątki:

  1. nici są lekkie procesy.Wątki są wiązane wewnątrz procesu.
  2. wątki mają współdzieloną pamięć, dane, zasoby, pliki itp.
  3. wątki są tworzone przy użyciu metody clone ().
  4. przełączanie kontekstu między wątkami nie jest zbyt czasochłonne jako proces.

Przykład:
Otwieranie wielu kart w przeglądarce.

 24
Author: ANK,
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-09-01 04:49:24

Zarówno wątki, jak i procesy są atomowymi jednostkami alokacji zasobów systemu operacyjnego (tzn. istnieje model współbieżności opisujący Podział czasu procesora między nimi oraz model posiadania innych zasobów systemu operacyjnego). Istnieje różnica w:

  • współdzielone zasoby (wątki z definicji dzielą pamięć, nie posiadają niczego poza stosem i zmiennymi lokalnymi; procesy mogą również współdzielić pamięć, ale istnieje do tego osobny mechanizm, utrzymywany przez system operacyjny)
  • przestrzeń alokacji (przestrzeń jądra dla procesów vs. przestrzeń użytkownika dla wątków)

Greg Hewgill powyżej miał rację co do Erlang Znaczenie słowa "proces", i tutaj jest dyskusja o tym, dlaczego Erlang może zrobić procesy lekkie.

 17
Author: Sergey Mikhanov,
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
2008-10-14 09:35:39

Http://lkml.iu.edu/hypermail/linux/kernel/9608/0191.html

Linus Torvalds ([email protected])

Tue, 6 Aug 1996 12:47: 31 +0300 (EET DST)

Wiadomości posortowane według: [data ] [wątek ][ temat ] [autor]

Następna wiadomość: Bernd P. Ziller: "Re: Oops in get_hash_table"

Poprzednia wiadomość: Linus Torvalds: "Re: i / o request ordering"

On Mon, 5 Aug 1996, Peter P. Eiserloh wrote:

Musimy jasno określić pojęcie wątków. Zbyt wielu ludzi wydaje się mylić wątek z procesem. Następująca dyskusja nie odzwierciedla obecnego stanu Linuksa, a raczej jest staraj się pozostać na wysokim poziomie dyskusji.

Nie!

Nie ma powodu, aby sądzić, że "wątki" i "procesy" są oddzielne byty. Tak to się tradycyjnie robi, ale ja osobiście uważam, że to poważny błąd myśleć w ten sposób. Jedyny uzasadnienie myślenie w ten sposób to historyczny bagaż.

Zarówno wątki, jak i procesy są naprawdę tylko jedną rzeczą: "kontekstem egzekucja". Próba sztucznego rozróżniania różnych przypadków jest po prostu samokontrola.

"kontekst egzekucji", zwany Coe, to tylko konglomerat z całego stanu tego COE. Ten stan obejmuje takie rzeczy jak procesor stan (rejestry itp.), stan MMU (mapowanie stron), stan uprawnień (uid, gid) i różne "stany komunikacyjne" (otwarte pliki, sygnał obsługi itp.). Tradycyjnie różnica między "nitką" a "proces" polega głównie na tym, że wątek ma stan procesora (+ewentualnie jakiś inny stan minimalny), podczas gdy cały inny kontekst pochodzi z proces. Jednak to tylko jeden sposób podziału stanu całkowitego COE, i nie ma nic, co mówi, że jest to właściwy sposób, aby to zrobić. Ograniczanie siebie taki obraz jest po prostu głupi.

Sposób, w jaki Linux myśli o to (i sposób, w jaki chcę, aby wszystko działało) jest że istnieje nie ma czegoś takiego jak" proces "czy"wątek". Jest tylko całość COE (nazywanego przez Linuksa "zadaniem"). Różne COE mogą dzielić ze sobą części swojego kontekstu i jeden podzbiór Z to dzielenie jest tradycyjną konfiguracją "wątku" / "procesu", ale to powinien być postrzegany tylko jako podzbiór (jest to ważny podzbiór, ale to znaczenie nie wynika z designu, ale ze standardów: my oczywiście chcesz uruchamiać programy zgodne ze standardami na Linuksie też).

W skrócie: nie projektuj wokół wątku / sposobu myślenia procesu. Na jądro powinno być zaprojektowane wokół sposobu myślenia COE, a następnie biblioteka pthreads może eksportować Ograniczony interfejs pthreads do użytkowników kto chce wykorzystać ten sposób patrzenia na COE ' a.

Tylko jako przykład tego, co staje się możliwe, gdy myślisz, że COE jest przeciwny wątkowi / procesowi:

  • można zrobić zewnętrzny program "cd", coś, co jest tradycyjnie niemożliwe w UNIX i / lub proces / thread (głupi przykład, ale pomysł jest to, że można mieć tego rodzaju "moduły", które nie są ograniczone do tradycyjna konfiguracja UNIX/threads). Do a:

Clone (CLONE_VM|CLONE_FS);

Child: execve ("external-cd");

/ * "execve ()" odłączy maszynę wirtualną, więc jedynym powodem, dla którego użyty CLONE_VM miał przyspieszyć proces klonowania */

  • możesz zrobić "vfork()" naturalnie (mija minimalne wsparcie dla jądra, ale to wsparcie idealnie pasuje do sposobu myślenia CUA): {]}

Clone (CLONE_VM);

Child: continue to run, finally execve ()

Mother: wait for execve

  • można wykonać zewnętrzne "IO deamons":

Clone (CLONE_FILES);

Child: otwórz deskryptory plików itp

Matka: użyj fd ' s dziecko otwarte i vv.

Wszystkie powyższe prace bo nie jesteś przywiązany do wątku/procesu sposób myślenia. Pomyśl o serwerze WWW na przykład, gdzie CGI skrypty są wykonywane jako "wątki wykonania". Nie możesz tego zrobić z tradycyjnych wątków, ponieważ tradycyjne wątki zawsze muszą się dzielić całą przestrzeń adresową, więc musiałbyś linkować we wszystkim, co kiedykolwiek chciał zrobić w samym serwerze WWW ("wątek" nie może uruchomić innego wykonywalny).

Myślenie o tym jako o " kontekście wykonanie " problem zamiast, Twój zadania mogą teraz wybrać wykonywanie programów zewnętrznych (=oddzielenie przestrzeni adresowej od rodzica) itp. Jeśli chcą, lub mogą Dla przykład Udostępnij wszystko rodzicowi z wyjątkiem dla pliku deskryptorów (dzięki czemu pod - "wątki" mogą otwierać wiele plików bez rodzic musi się o nie martwić: zamykają się automatycznie, gdy sub - "thread" wychodzi i nie zużywa fd w rodzicu).

Pomyśl o gwintowanym na przykład" inetd". Chcesz niskie koszty fork+exec, więc w Linuksie można zamiast używać " forka()" piszesz wielowątkowy inetd, w którym każdy wątek jest tworzony z po prostu CLONE_VM (Udostępnij przestrzeń adresową, ale nie udostępniaj deskryptorów plików itp.). Następnie dziecko może wykonać, jeśli była to usługa zewnętrzna (rlogind, na przykład), a może była to jedna z wewnętrznych usług inetd (echo, timeofday) w takim przypadku po prostu robi to i wychodzi.

You can ' t do that z "wątek" / "proces".

Linus

 17
Author: 陳 力,
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-04-17 13:29:36

Próbuje odpowiedzieć na to pytanie dotyczące Java world.

Proces jest wykonaniem programu, ale wątek jest pojedynczą sekwencją wykonawczą w procesie. Proces może zawierać wiele wątków. Wątek jest czasami nazywany lekkim procesem .

Na przykład:

Przykład 1: JVM działa w jednym procesie, a wątki w JVM dzielą stertę należącą do tego procesu. Dlatego kilka wątków może uzyskać dostęp do tego samego obiektu. Wątki dzielą stertę i mają własną przestrzeń stosu. W ten sposób wywołanie metody przez jeden wątek i jej zmienne lokalne są zabezpieczone przed innymi wątkami. Ale sterta nie jest bezpieczna dla wątku i musi być zsynchronizowana dla bezpieczeństwa wątku.

Przykład 2: Program może nie być w stanie rysować obrazów, czytając naciśnięcia klawiszy. Program musi zwrócić pełną uwagę na wejście klawiatury i brak możliwości obsługi więcej niż jednego zdarzenia na raz doprowadzi do kłopotów. Idealnym rozwiązaniem tego problemu jest bezproblemowe wykonywanie dwóch lub więcej sekcji programu w tym samym czasie. Threads pozwala nam to zrobić. Tutaj rysowanie obrazu jest procesem, a czytanie naciśnięcia klawisza jest procesem podrzędnym (wątkiem).

 14
Author: Rupesh,
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
2013-04-03 18:57:42

Zarówno procesy jak i wątki są niezależnymi sekwencjami wykonania. Typowa różnica polega na tym, że wątki (tego samego procesu) działają w przestrzeni pamięci współdzielonej, podczas gdy procesy działają w oddzielnych przestrzeniach pamięci.

Proces

Jest programem wykonywanym. posiada sekcję tekstową tj. kod programu, bieżącą aktywność reprezentowaną przez wartość licznika programów i zawartość rejestru procesorów. Zawiera również stos procesów, który zawiera tymczasowe dane(takie jak parametry funkcji, zwracane zmienne adresowane i lokalne) oraz sekcja danych, która zawiera zmienne globalne. Proces może również zawierać stertę, która jest pamięcią przydzielaną dynamicznie w czasie wykonywania procesu.

Thread

Wątek jest podstawową jednostką wykorzystania procesora; składa się z identyfikatora wątku, licznika programu, zestawu rejestru i stosu. udostępniał innym wątkom należącym do tego samego procesu jego sekcję kodu, sekcję danych i inne zasoby systemu operacyjnego, takie jak jako otwarte pliki i sygnały.

-- pobrane z systemu operacyjnego przez Galvin

 13
Author: Saurabh Juneja,
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-07-12 08:49:14

Próba odpowiedzi z widoku jądra Linuksa

Program staje się procesem po uruchomieniu do pamięci. Proces posiada własną przestrzeń adresową, co oznacza, że posiada w pamięci różne segmenty, takie jak .text segment do przechowywania skompilowanego kodu, .bss do przechowywania niezainicjalizowanych zmiennych statycznych lub globalnych, itp.
każdy proces będzie miał swój własny licznik programu i przestrzeń użytkownika stos.

wewnątrz jądra, każdy proces miałby swój własny stos jądra (który jest oddzielony od przestrzeń użytkownika dla problemów z bezpieczeństwem) i strukturę o nazwie task_struct, która jest ogólnie abstrakcyjna jako blok sterowania procesem, przechowujący wszystkie informacje dotyczące procesu, takie jak jego priorytet, stan(i wiele innych części).
proces może mieć wiele wątków wykonania.

Przechodząc do wątków, znajdują się one wewnątrz procesu i dzielą przestrzeń adresową procesu nadrzędnego wraz z innymi zasobami, które mogą być przekazywane podczas tworzenia wątku, takimi jak system plików zasoby, współdzielenie oczekujących sygnałów, współdzielenie danych (zmiennych i instrukcji) czyniąc wątki lekkimi, a tym samym umożliwiając szybsze przełączanie kontekstu.

w jądrze każdy wątek ma swój własny stos jądra wraz ze strukturą task_struct, która definiuje wątek. Dlatego też kernel widzi wątki tego samego procesu co różne encje i jest sam w sobie schedulowalny. Wątki w tym samym procesie mają wspólny id zwany jako thread group id (tgid), mają również unikalny id zwany jako ID procesu (pid).

 12
Author: Rachit Tayal,
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
2019-11-15 07:35:18

Dla tych, którzy są bardziej komfortowe w nauce poprzez wizualizację, oto poręczny schemat, który stworzyłem, aby wyjaśnić proces i wątki.
Wykorzystałem informacje z MSDN - o procesach i wątkach

Procesy i wątki

 11
Author: Saurabh R S,
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-04-15 12:12:36

Różnica między wątkiem a procesem?

Proces jest wykonującą instancją aplikacji, a wątek jest ścieżką wykonania w procesie. Ponadto proces może zawierać wiele threads.It ważne jest, aby pamiętać, że wątek może zrobić wszystko, co proces może zrobić. Ale ponieważ proces może składać się z wielu wątków, wątek może być uważany za "lekki" proces. Tak więc zasadniczą różnicą między wątkiem a procesem jest praca, do której każdy z nich jest używany / align = "left" / Wątki są używane do małych zadań, podczas gdy procesy są używane do bardziej "ciężkich" zadań – w zasadzie do wykonywania aplikacji.

Inna różnica między wątkiem a procesem polega na tym, że wątki w tym samym procesie mają tę samą przestrzeń adresową, podczas gdy różne procesy nie. Pozwala to wątkom odczytywać i zapisywać te same struktury danych i zmienne, a także ułatwia komunikację między wątkami. Komunikacja między procesami-znana również jako IPC, czyli komunikacja międzyprocesowa - jest dość trudna i zasobochłonna.

Oto podsumowanie różnic między wątkami i procesami:

  1. Wątki są łatwiejsze do tworzenia niż procesy, ponieważ nie wymaga oddzielnej przestrzeni adresowej.

  2. Wielowątkowość wymaga starannego programowania, ponieważ wątki Udostępnij struktury danych, które powinny być modyfikowane tylko przez jeden wątek na raz. W przeciwieństwie do wątków, procesy nie dzielą tego samego przestrzeń adresowa.

  3. Wątki są uważane za lekkie, ponieważ używają daleko mniej zasobów niż procesy.

  4. Procesy są od siebie niezależne. Wątki, ponieważ dzielenie tej samej przestrzeni adresowej jest współzależne, więc ostrożność musi być zrobione tak, aby różne wątki nie nadepnęły na siebie.
    Jest to naprawdę inny sposób stwierdzenia #2 powyżej.

  5. Proces może składać się z wielu wątków.

 9
Author: Carlos,
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
2013-11-25 10:14:25

Oto co otrzymałem z jednego z artykułów na temat projektu Code . To chyba wyjaśnia wszystko, co potrzebne.

Wątek jest kolejnym mechanizmem dzielenia obciążenia na oddzielne strumienie egzekucji. Nić jest lżejsza niż proces. To oznacza to, że oferuje mniejszą elastyczność niż proces pełnego wydmuchiwania, ale może być inicjowane szybciej, ponieważ system operacyjny ma mniej ustawcie się. Gdy program składa się z dwóch lub więcej wątków, wszystkie wątki mają wspólną przestrzeń pamięci. Procesy otrzymują oddzielne przestrzenie adresowe. wszystkie wątki dzielą jedną stertę. Ale każdy wątek ma swój własny stos.

 9
Author: Carthi,
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-17 13:38:21

Proces:

Process jest w zasadzie programem wykonywanym. Jest to podmiot aktywny. Niektóre systemy operacyjne używają terminu "zadanie" w odniesieniu do wykonywanego programu. Proces jest zawsze przechowywany w pamięci głównej, określanej również jako pamięć podstawowa lub pamięć o dostępie losowym. Dlatego Proces jest określany jako podmiot aktywny. Znika po ponownym uruchomieniu maszyny. Kilka procesów może być powiązanych z tym samym programem. W systemie wieloprocesorowym, wiele procesów może być wykonywany równolegle. W systemie jednoprocesorowym, choć nie osiąga się prawdziwej równoległości, stosuje się algorytm szeregowania procesów, a procesor jest zaplanowany do wykonania każdego procesu po kolei, dając złudzenie współbieżności. Przykład: wykonanie wielu instancji programu 'Calculator'. Każda z instancji jest określana jako proces.

Wątek:

Wątek jest podzbiorem procesu. Jest określany jako "lekki proces", ponieważ jest podobny do rzeczywistego procesu, ale wykonuje w kontekście procesu i dzieli te same zasoby przydzielone procesowi przez jądro. Zwykle proces ma tylko jeden wątek sterowania – Jeden zestaw instrukcji maszynowych wykonujących na raz. Proces może również składać się z wielu wątków wykonania, które wykonują instrukcje jednocześnie. Wiele wątków sterowania może wykorzystać prawdziwą równoległość możliwą w systemach wieloprocesorowych. W systemie jednoprocesorowym algorytm harmonogramowania wątków jest zastosowany I procesor ma uruchamiać każdy wątek po kolei. Wszystkie wątki uruchomione w procesie mają tę samą przestrzeń adresową, deskryptory plików, stos i inne atrybuty związane z procesem. Ponieważ wątki procesu dzielą tę samą pamięć, synchronizacja dostępu do udostępnionych danych z procesem zyskuje bezprecedensowe znaczenie.

Ref-https://practice.geeksforgeeks.org/problems/difference-between-process-and-thread

 9
Author: Lovekush Vishwakarma,
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
2019-08-19 08:40:35

Z punktu widzenia rozmówcy, są w zasadzie tylko 3 główne rzeczy, które chcę usłyszeć, oprócz oczywistych rzeczy, takich jak proces może mieć wiele wątków:

  1. wątki mają tę samą przestrzeń pamięci, co oznacza, że wątek może uzyskać dostęp do pamięci z innej pamięci wątku. Procesy normalnie nie mogą.
  2. zasoby. Zasoby (pamięć, uchwyty, gniazda itp.) są zwalniane po zakończeniu procesu, a nie po zakończeniu wątku.
  3. Bezpieczeństwo. Proces ma stałe zabezpieczenie token. Z drugiej strony wątek może podszywać się pod różnych użytkowników / tokeny.

Jeśli chcesz więcej, odpowiedź Scotta Langhama obejmuje prawie wszystko. Wszystko to z perspektywy systemu operacyjnego. Różne języki mogą implementować różne pojęcia, takie jak zadania, wątki świetlne i tak dalej, ale są to tylko sposoby korzystania z wątków (włókien w systemie Windows). Nie ma wątków sprzętowych i programowych. Istnieją wyjątki sprzętowe i programowe i przerywa , lub tryb użytkownika i wątki jądra .

 8
Author: AndreiM,
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-04-01 08:23:52
  1. Wątek działa w przestrzeni pamięci współdzielonej, ale proces działa w oddzielnej przestrzeni pamięci
  2. wątek jest procesem lekkim, ale proces jest procesem ciężkim.
  3. wątek jest podtypem procesu.
 8
Author: Sushil kumar,
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-17 13:33:13

PochodzÄ ... c ze Ĺ "wiata wbudowanego, chciaĹ' bym dodać, Ĺźe koncepcja procesĂłw istnieje tylko w" duĹźych "procesorach (desktop CPU , ARM Cortex a-9), ktĂłre posiadajÄ ... MMU (memory management unit), oraz systemach operacyjnych obsĹ' ugujÄ ... cych MMU (takich jak Linux). Z małymi / starymi procesorami i mikrokontrolerami oraz małym systemem operacyjnym RTO (real time operating system ), takim jak freeRTOS, nie ma obsługi MMU, a zatem nie ma procesów, a jedynie nici.

Threads mogą uzyskać dostęp do każdej pamięci i są one zaplanowane przez system operacyjny w sposób przeplatany, więc wydają się działać równolegle (lub z wielordzeniowymi naprawdę działają równolegle).

Procesy natomiast żyją w swojej prywatnej piaskownicy wirtualnej pamięci, zapewnianej i strzeżonej przez MMU. Jest to przydatne, ponieważ umożliwia:

  1. utrzymanie procesu buggy od awarii całego systemu.
  2. utrzymanie bezpieczeństwa poprzez tworzenie innych przetwarza dane niewidoczne i nieosiągalny. Rzeczywistą pracą wewnątrz procesu zajmuje się jeden lub więcej wątków.
 6
Author: Divergence,
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-01-13 07:10:14
  1. zasadniczo, wątek jest częścią procesu bez procesu wątek nie byłby w stanie działać.
  2. nić jest lekka, podczas gdy proces jest ciężki.
  3. komunikacja pomiędzy procesami wymaga trochę czasu, podczas gdy wątek wymaga mniej czasu.
  4. wątki mogą dzielić ten sam obszar pamięci, podczas gdy proces żyje w oddzielnych.
 6
Author: dinesh sharma,
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-07-20 12:59:16

Proces : program w trakcie wykonywania znany jest jako proces

Thread : Thread jest funkcjonalnością wykonywaną z drugą częścią programu w oparciu o koncepcję "jeden z drugim", więc thread jest częścią procesu..

 6
Author: saidesh kilaru,
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-04-11 18:22:57

Przeczytałem tam prawie wszystkie odpowiedzi, niestety, jako student na kursie OS obecnie nie mogę dokładnie zrozumieć tych dwóch pojęć. Chodzi mi o to, że większość facetów czyta z niektórych książek o systemie operacyjnym różnice, tzn. wątki są w stanie uzyskać dostęp do globalnych zmiennych w jednostce transakcji, ponieważ wykorzystują przestrzeń adresową swojego procesu. Jednak na nowo pojawia się pytanie, dlaczego istnieją procesy, wiemy już, że wątki są bardziej lekkie w stosunku do procesów. Spójrzmy na poniższy przykład, wykorzystując obrazek z jednej z wcześniejszych odpowiedzi ,

Mamy 3 wątki pracujące jednocześnie nad dokumentem word np. Libre Office. Pierwszy sprawdza pisownię poprzez podkreślenie, jeśli słowo jest błędnie napisane. Drugi bierze i drukuje litery z klawiatury. A ostatni zapisuje dokument w każdym krótkim czasie, aby nie stracić dokumentu, w którym pracował, jeśli coś pójdzie nie tak. w tym przypadku, 3 wątki nie mogą być 3 procesami, ponieważ dzielą wspólna pamięć, która jest przestrzenią adresową ich procesu, a tym samym wszyscy mają dostęp do edytowanego dokumentu. więc droga jest dokumentem word wraz z dwoma buldożerami, które są wątkami, choć jeden z nich jest brak w obrazie.

Tutaj wpisz opis obrazka

 6
Author: snr,
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
2019-03-12 15:41:50

Budując algorytm w Pythonie (język interpretowany), który zawierał wielowątkowość, byłem zaskoczony, że czas wykonania nie był lepszy w porównaniu do algorytmu sekwencyjnego, który wcześniej zbudowałem. Aby zrozumieć przyczynę tego wyniku, przeczytałem trochę i wierzę, że to, czego się nauczyłem, oferuje interesujący kontekst, z którego można lepiej zrozumieć różnice między wielowątkowością a wielowątkowością.

Systemy wielordzeniowe mogą wykonywać wiele wątków wykonania, a więc Python powinien wspierać wielowątkowość. Ale Python nie jest językiem skompilowanym, a zamiast tego jest językiem interpretowanym1. Oznacza to, że program musi być zinterpretowany w celu uruchomienia, a interpreter nie jest świadomy programu przed rozpoczęciem wykonywania. To, co wie, to jednak reguły Pythona i dynamicznie je stosuje. Optymalizacje w Pythonie muszą więc być głównie optymalizacjami samego interpretera, a Nie kod, który należy uruchomić. Jest to w przeciwieństwie do języków skompilowanych, takich jak C++, i ma konsekwencje dla wielowątkowości w Pythonie. W szczególności Python używa globalnej blokady interpretera do zarządzania wielowątkowością.

Z drugiej strony skompilowany język jest, cóż, skompilowany. Program jest przetwarzany "całkowicie", gdzie najpierw jest interpretowany zgodnie z jego definicjami składniowymi, następnie mapowany do pośredniej reprezentacji języka agnostycznego, a na koniec linkowany do kod wykonywalny. Proces ten pozwala na wysoką optymalizację kodu, ponieważ jest on dostępny w momencie kompilacji. Różne interakcje i relacje programu są definiowane w momencie tworzenia pliku wykonywalnego i można podejmować solidne decyzje dotyczące optymalizacji.

W nowoczesnych środowiskach interpreter Pythona musi zezwalać na wielowątkowość, a to musi być zarówno bezpieczne, jak i wydajne. W tym przypadku różnica między językiem interpretowanym a językiem skompilowanym / align = "left" / Interpreter nie może zakłócać wewnętrznie współdzielonych danych z różnych wątków, jednocześnie optymalizując wykorzystanie procesorów do obliczeń.

Jak już wspomniano w poprzednich postach, zarówno proces, jak i wątek są niezależnymi sekwencyjnymi wykonaniami, z podstawową różnicą, że pamięć jest współdzielona przez wiele wątków procesu, podczas gdy procesy izolują swoje przestrzenie pamięci.

W Pythonie dane są chronione przed jednoczesnym dostępem przez różne wątki przez globalną blokadę interpretera. Wymaga to, aby w dowolnym programie Pythona można było wykonać tylko jeden wątek w dowolnym momencie. Z drugiej strony możliwe jest uruchamianie wielu procesów, ponieważ pamięć dla każdego procesu jest odizolowana od innych procesów, a procesy mogą działać na wielu rdzeniach.


1 Donald Knuth ma dobre wyjaśnienie procedur interpretacyjnych w sztuce programowania komputerowego: fundamentalne algorytmy.

 5
Author: ,
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-07-17 18:55:59

Wątki w tym samym procesie współdzielą pamięć, ale każdy wątek ma swój własny stos i rejestry, a wątki przechowują dane specyficzne dla wątku w stercie. Wątki nigdy nie wykonują się niezależnie, więc komunikacja między wątkami jest znacznie szybsza w porównaniu do komunikacji między procesami.

Procesy nigdy nie mają tej samej pamięci. Gdy proces potomny tworzy, duplikuje lokalizację pamięci procesu macierzystego. Komunikacja procesowa odbywa się za pomocą potoku, pamięci współdzielonej i wiadomości parsowanie. Przełączanie kontekstu między wątkami jest bardzo powolne.

 4
Author: S.Adikaram,
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-19 02:24:24

Najlepsza odpowiedź jaką do tej pory znalazłem to Michael Kerrisk 'the Linux Programming Interface':

We współczesnych implementacjach Uniksa, każdy proces może mieć wiele wątków egzekucji. Jednym ze sposobów wyobrażania sobie wątków jest zbiór procesów które mają tę samą pamięć wirtualną, a także szereg innych atrybuty. Każdy wątek wykonuje ten sam kod programu i udostępnia ten sam obszar danych i sterta. Jednak każdy wątek ma swój własny stos zawierające lokalne zmienne i informacje o połączeniach funkcji. [LPI 2.12]

Ta książka jest źródłem wielkiej jasności; Julia Evans wspomniała o swojej pomocy w wyjaśnieniu, jak naprawdę działają grupy Linuksowe w w tym artykule.

 4
Author: Zach Valenta,
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
2019-02-12 05:29:26

Przykład 1: JVM działa w pojedynczym procesie, a wątki w JVM dzielą stertę należącą do tego procesu. Dlatego kilka wątków może uzyskać dostęp do tego samego obiektu. Wątki dzielą stertę i mają własną przestrzeń stosu. W ten sposób wywołanie metody przez jeden wątek i jej zmienne lokalne są zabezpieczone przed innymi wątkami. Ale sterta nie jest bezpieczna dla wątku i musi być zsynchronizowana dla bezpieczeństwa wątku.

 3
Author: user3633458,
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
2014-05-13 16:34:55

Są prawie takie same... Ale kluczową różnicą jest to, że wątek jest lekki, a Proces jest ciężki pod względem przełączania kontekstu, obciążenia roboczego i tak dalej.

 3
Author: Nasir Ul Islam Butt,
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-17 13:39:37