Jaka jest techniczna różnica między procesem a wątkiem?
Mam wrażenie, że słowo takie jak 'proces' jest nadużywane i że istnieją również 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?
Zarówno procesy jak i wątki są niezależnymi sekwencjami wykonania. Typową różnicą jest to, że wątki (tego samego procesu) działają we wspólnej przestrzeni pamięci, podczas gdy procesy działają w oddzielnych przestrzeniach pamięci.
I'm not sure what "hardware" vs "software" threads you might be referring to. Wątki są cechą środowiska operacyjnego, a nie cechą procesora (chociaż procesor zazwyczaj ma operacje, które sprawiają, że wątki są wydajne).
Erlang używa terminu "proces", ponieważ nie eksponuje modelu multiprogramowania z pamięcią współdzieloną. Nazywanie ich "wątkami" sugerowałoby, że mają one pamięć współdzieloną.
Aplikacja składa się z jednego lub więcej procesów. Proces, w najprostszych słowach, jest wykonującym się programem. W kontekście procesu działa jeden lub więcej wątków. Wątek jest podstawową jednostką, do której system operacyjny przydziela czas procesora. Wątek może wykonywać dowolną część kodu procesu, w tym części aktualnie wykonywane 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, które je zaplanują.
Skradzione z tutaj.
Zarówno wątki jak i procesy są atomowymi jednostkami alokacji zasobów OS (tzn. istnieje model współbieżności opisujący jak czas procesora jest dzielony między nimi, oraz model posiadania innych zasobów OS). Istnieje różnica w:
Greg Hewgill powyżej miał rację co do Erlangowego znaczenia słowa "proces", a tutaj jest dyskusja o tym, dlaczego Erlang mógł zrobić procesy lekkie.