2012-05-07 12 views
9

Znalazłem odpowiedź na pytanie here. Ale nie rozumiem niektórych pomysłów w odpowiedzi. Na przykład, mówi się, że proces lekki dzieli swoją logiczną przestrzeń adresową z innymi procesami. Co to znaczy? Mogę zrozumieć tę samą sytuację z 2 wątkami: oba z nich dzielą jedną przestrzeń adresową, więc obie z nich mogą czytać dowolne zmienne z segmentu bss (na przykład). Ale mamy wiele różnych procesów z różnymi sekcjami bss i nie wiem jak podzielić się nimi wszystkimi.Jaka jest różnica między procesem lekkim a gwintem?

+1

Możliwa dup z http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread – Gray

+0

Wydajesz się być bardzo zdezorientowany o niektórych pojęć. Proponuję najpierw zbadać definicję nici i procesu. – Tudor

+0

@Gray, Bardzo dobrze rozumiem różnicę między procesami i wątkami. Problem polega na zrozumieniu lekkich procesów. – Allok

Odpowiedz

1

Od MSDN, Threads and Processes:

Procesy istnieć w systemie operacyjnym i odpowiadać co użytkownicy zobaczyć jak programy lub aplikacje. Wątek, z drugiej strony, istnieje w procesie. Z tego powodu wątki są czasami określane jako jako procesy lekkie. Każdy proces składa się z jednego lub więcej wątków .

0

Proces zawiera jeden lub więcej wątków, a wątek może zrobić wszystko, co może zrobić proces. Również wątki wewnątrz procesu dzielą tę samą przestrzeń adresową, ponieważ koszt komunikacji między wątkami jest niski, ponieważ korzysta z tej samej sekcji kodu, sekcji danych i zasobów systemu operacyjnego, więc wszystkie te cechy wątku sprawiają, że jest to proces "lekki".

4

Nie jestem pewien, czy odpowiedzi są tutaj poprawne, więc proszę o opublikowanie mojej wersji.

Istnieje różnica między procesem - LWP (proces lekki) a wątkiem użytkownika. Zostawię definicję procesu na bok, ponieważ jest ona mniej lub bardziej znana i koncentruje się na LWP vs user threads. LWP to tak naprawdę zwane dziś wątkami. Początkowo wątek użytkownika oznaczał wątek zarządzany przez samą aplikację, a jądro nic o nim nie wie. LWP jest jednostką planowania i wykonywania przez jądro.

Przykład: Załóżmy, że system ma 3 inne procesy, a planowanie odbywa się w trybie "round-robin" bez priorytetów. I masz 1 procesor/rdzeń.

Opcja 1. Masz 2 wątki użytkownika używające jednego LWP. Oznacza to, że z perspektywy systemu operacyjnego masz JEDNĄ jednostkę planowania. Całkowicie działa 4 LWP (3 inne + 1 twoje). Twoja LWP dostaje 1/4 całkowitego czasu procesora, a ponieważ masz 2 wątki użytkownika, każda z nich otrzymuje 1/8 całkowitego czasu procesora (w zależności od implementacji).

Opcja 2. Masz 2 LWP. Z perspektywy systemu operacyjnego masz DWIE jednostki planowania. Całkowicie działa 5 LWP. Twój LWP dostaje 1/5 całkowitego czasu procesora EACH, a twoja aplikacja dostaje 2/5 mocy procesora.

Kolejna trudna różnica - LWP ma identyfikator pid (identyfikator procesu), wątki użytkownika nie.

Z jakiegoś powodu nazywanie się nie zaszkodziło i odnosimy się do LWP jako wątków.

Istnieje zdecydowanie więcej różnic, ale proszę odnieść się do slajdów. http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt

EDIT:

Po wysłaniu, znalazłem dobry artykuł, który wyjaśnia wszystko dokładniej i jest w lepszym angielskim niż piszę. http://www.thegeekstuff.com/2013/11/linux-process-and-threads/

Powiązane problemy