Jaka jest różnica między widelcem a gwintem?

Czy ktoś może wyjaśnić różnicę między widelcem a gwintem?

Author: nbro, 2010-03-20

5 answers

Fork daje zupełnie nowy proces, który jest kopią bieżącego procesu, z tymi samymi segmentami kodu. Wraz ze zmianą obrazu pamięci (zazwyczaj jest to spowodowane różnym zachowaniem dwóch procesów) następuje oddzielenie obrazów pamięci (kopiowanie przy zapisie), jednak kod wykonywalny pozostaje taki sam. Zadania nie współdzielą pamięci, chyba że używają prymitywnego Inter Process Communication (IPC).

Jeden proces może mieć wiele wątków, każdy wykonywany równolegle w tym samym kontekście procesu. Pamięć i inne zasoby są współdzielone między wątkami, dlatego udostępniane dane muszą być dostępne za pośrednictwem prymitywnych i synchronizujących obiektów (takich jak muteksy , zmienne warunkowe i semafory ), które pozwalają uniknąć uszkodzenia danych.

 76
Author: Dacav,
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-15 12:58:52

Widelec:

Fork jest niczym innym jak nowym procesem, który wygląda dokładnie tak jak stary lub macierzysty proces, ale nadal jest to inny proces z innym identyfikatorem i własną pamięcią. Proces rodzic tworzy oddzielną przestrzeń adresową dla dziecka. Zarówno proces macierzysty, jak i potomny posiadają ten sam segment kodu, ale wykonują się niezależnie od siebie.

Najprostszym przykładem forkingu jest uruchomienie polecenia na powłoce w unix/linux. Za każdym razem, gdy użytkownik wydaje polecenie, powłoka rozwidla proces potomny i zadanie zostanie wykonane.

Gdy wywołanie systemowe fork jest wydawane, tworzona jest kopia wszystkich stron odpowiadających procesowi nadrzędnemu, ładowana do oddzielnej pamięci przez system operacyjny dla procesu podrzędnego, ale w niektórych przypadkach nie jest to potrzebne. Podobnie jak w wywołaniach systemowych' exec', nie ma potrzeby kopiowania stron procesu nadrzędnego, ponieważ execv zastępuje przestrzeń adresową samego procesu nadrzędnego.

Kilka rzeczy do odnotowania o widelcu są:

  • proces potomny będzie miał własny, unikalny identyfikator procesu.
  • proces potomny powinien mieć własną kopię deskryptora pliku rodzica.
  • blokady plików ustawione przez proces nadrzędny nie mogą być dziedziczone przez proces potomny.
  • wszystkie semafory otwarte w procesie macierzystym muszą być również otwarte w procesie potomnym.
  • proces potomny powinien posiadać własną kopię deskryptorów kolejki komunikatów rodziców.
  • dziecko będzie miało swoje przestrzeń adresowa i pamięć.

Wątki:

Wątki to lekkie procesy (LWP). Tradycyjnie wątek jest tylko stanem procesora (i innym minimalnym stanem) z procesem zawierającym pozostałości (dane, stos, I / O, sygnały). Wątki wymagają mniej narzutu niż "rozwidlenie" lub wywołanie nowego procesu, ponieważ system nie inicjalizuje nowej przestrzeni pamięci wirtualnej systemu i środowiska dla procesu. Podczas gdy najskuteczniejszy w systemie wieloprocesorowym, w którym przepływ procesu można zaplanować uruchomienie na innym procesorze, zyskując tym samym prędkość poprzez równoległe lub rozproszone przetwarzanie, zyski znajdują się również w systemach uniprocesorowych, które wykorzystują opóźnienia we I/O i innych funkcjach systemowych, które mogą zatrzymać wykonywanie procesu.

Threads in the same process share:

  • instrukcje procesowe
  • Większość danych
  • otwórz pliki (deskryptory)
  • sygnały i manipulatory sygnałów
  • bieżący katalog roboczy
  • Użytkownik i grupa id

Więcej szczegółów można znaleźć tutaj .

 66
Author: GeekRide,
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-03-15 18:31:51

Odpowiedź Dacav jest doskonała, chciałem tylko dodać, że nie wszystkie modele gwintowania dają prawdziwą multi-processing.

Na przykład Domyślna implementacja wątków Rubiego nie używa prawdziwych wątków OS / kernel. Zamiast tego naśladuje posiadanie wielu wątków, przełączając się między obiektami wątku w jednym wątku / procesie jądra.

Jest to ważne w systemach wieloprocesorowych / wielordzeniowych, ponieważ tego typu Lekkie wątki mogą działać tylko na jednym rdzeniu - nie uzyskaj wiele na drodze do zwiększenia wydajności z posiadania wielu wątków.

Inne miejsce, które robi różnicę, to blokowanie jednego wątku (czekanie na I/O lub wywołanie IOCTL sterownika), blokowanie wszystkich wątków.

Nie jest to obecnie zbyt powszechne - większość implementacji wątków używa wątków jądra, które nie cierpią z powodu tych problemów - ale warto o tym wspomnieć dla kompletności.

Dla kontrastu, fork daje inny proces, który jest uruchamiany jednocześnie na innym fizycznym Procesora podczas wykonywania oryginalnego procesu. Niektórzy uważają, że IPC jest bardziej odpowiedni dla swojej aplikacji, inni wolą gwintowanie.

Powodzenia i miłej zabawy! Wielowątkowość to wyzwanie i satysfakcja.

 28
Author: Sam Post,
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
2010-03-20 14:24:46

Wątki są funkcjami uruchamianymi równolegle, fork jest nowym procesem z dziedziczeniem rodzicielskim. Wątki są dobre do wykonywania zadania równolegle, podczas gdy forki są niezależnymi procesami, które również działają jednocześnie. Wątki mają warunki wyścigowe i tam steruje semaforami i zamkami lub muteksami, rury mogą być używane zarówno w widłach, jak i w wątkach.

 5
Author: sergio,
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
2012-08-03 22:29:22
  1. wątki dzielą przestrzeń adresową procesu, który ją utworzył; procesy mają swój własny adres miejsce.
  2. wątki mają bezpośredni dostęp do segmentu danych swojego procesu; procesy mają własną kopię segment danych procesu macierzystego.
  3. wątki mogą bezpośrednio komunikować się z innymi wątkami swojego procesu; procesy muszą używać komunikacja międzyprocesowa do komunikacji z procesami rodzeństwa.
  4. wątki nie mają prawie żadnych napowietrznych; procesy mają znaczne koszty.
  5. nowe wątki są łatwo tworzone; nowe procesy wymagają duplikacji procesu nadrzędnego.
  6. wątki mogą sprawować znaczną kontrolę nad wątkami tego samego procesu; procesy mogą tylko sprawować kontrolę nad procesami dziecka.
  7. Zmiany w głównym wątku (anulowanie, zmiana priorytetu itp.) może wpływać na zachowanie innych wątki procesu; zmiany w procesie nadrzędnym nie wpływają na procesy potomne
 5
Author: Varun Chhangani,
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-07-20 14:59:46