Proces a wątki

Jak zdecydować, czy użyć wątków lub utworzyć osobny proces w aplikacji, aby osiągnąć równoległość.

Author: Cœur, 2008-09-15

6 answers

Wątki są bardziej lekkie, a do tworzenia kilku "pracowników" tylko do wykorzystania wszystkich dostępnych procesorów lub rdzeni, jesteś lepszy z wątków.

Gdy potrzebujesz, aby pracownicy byli lepiej izolowani i bardziej wytrzymali, jak w większości serwerów, korzystaj z gniazd. Gdy jeden wątek ulegnie awarii, zwykle usuwa cały proces, łącznie z innymi wątkami pracującymi w tym procesie. Jeśli proces staje się kwaśny i umiera, nie dotyka żadnego innego procesu, więc mogą szczęśliwie kontynuować swoje biznes, jakby nic się nie stało.

 15
Author: wvdschel,
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-09-15 14:03:03

Procesy mają bardziej izolowaną pamięć. Jest to ważne z wielu powodów:

  • trudniej jest pojedynczemu zadaniu rozbić inne zadania.
  • więcej pamięci będzie dostępnych dla każdego procesu. Jest to ważne w przypadku dużych, wysokowydajnych aplikacji, takich jak Apache lub serwerów bazodanowych, takich jak Postgres. Jest to ważne zarówno dla przydzielonej pamięci, jak i plików mapowanych pamięcią.
 5
Author: Adam Tegen,
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-09-15 14:40:56

Stopień równoległości zależy głównie od fizycznych procesorów / rdzeni dostępnych na komputerze. Jeśli masz maszynę jednoprocesorową/rdzeniową, oddzielne procesy mogą powodować zbyt duże koszty. W takim przypadku preferowane byłyby wątki.

Jeśli masz wiele rdzeni / procesorów, to w zależności od tego, co robi każdy proces/wątek, możesz wybrać procesy, jeśli narzut jest uzasadniony. Procesy mają oczywiście znacznie lepszy poziom izolacji pamięci niż wątki - ale jednocześnie w systemie Windows procesy są dość ciężkie w porównaniu do wątków.

Wątki oczywiście mogą udostępniać dane w tym samym procesie - ale ponownie trzeba by zsynchronizować dostęp do udostępnionych danych - aby zapobiec uszkodzonemu stanowi. Współdzielenie danych między procesami jest bardziej zaangażowane, narzut (który jest greated niż prosta synchronizacja wątków) w zależności od stosowanych mechanizmów, takich jak nazwane rury, niestandardowa komunikacja oparta na gniazdach, korzystanie z remoting framework, udostępniony plik / baza danych itd.

 4
Author: Krishna,
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-09-15 13:40:35

Ogólnie powinieneś używać procesów, gdy poszczególne strumienie wykonawcze nie muszą udostępniać danych globalnych i chciałbyś, aby każdy z nich był chroniony przed drugim.

 2
Author: Matt Brandt,
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-09-15 13:38:59
 2
Author: Andrei,
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-04-15 18:18:35

W Windows procesy są cięższe do tworzenia niż wątki. Więc jeśli masz kilka mniejszych zadań wątek lub Pula wątków byłoby lepiej. Lub użyj puli procesów do recyklingu procesów. Również współdzielenie stanu między procesami to więcej pracy niż współdzielenie stanu między wątkami. Ale z drugiej strony: wątki mogą destabilizować cały proces, usuwając z niego inne wątki. Jeśli chcesz zminimalizować ryzyko, że tak się stanie, możesz wybrać oddzielne procesy. AppDomains. net może być środkiem ziemia między nimi.

 1
Author: Lars Truijens,
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-09-15 13:41:31