mweerden: NT został zaprojektowany dla wielu użytkowników od pierwszego dnia, więc nie jest to tak naprawdę powód. Jednak masz rację co do tego, że tworzenie procesów odgrywa mniejszą rolę w NT niż w Uniksie, ponieważ NT, w przeciwieństwie do Uniksa, faworyzuje wielowątkowość nad wieloprocesowość.
Rob, to prawda, że fork jest stosunkowo tani, gdy używa się COW, ale w rzeczywistości po fork jest przeważnie wykonywany przez exec. Ponadto program exec musi załadować wszystkie obrazy. Dlatego omawianie działania widelca jest tylko częścią prawdy.
Omawiając szybkość tworzenia procesów, prawdopodobnie dobrym pomysłem jest rozróżnienie między NT i Windows / Win32. Jeśli chodzi o NT (czyli samo jądro), nie sądzę, aby tworzenie procesów (NtCreateProcess) i wątków (NtCreateThread) było znacznie wolniejsze niż na przeciętnym Uniksie. Może się trochę więcej działo, ale nie widzę tutaj głównej przyczyny różnicy w wydajności.
Jeśli jednak spojrzysz na Win32, zauważysz, że dodaje on sporo narzutów do tworzenia procesów. Po pierwsze, wymaga powiadomienia CSRSS o utworzeniu procesu, który obejmuje LPC. Wymaga dodatkowego załadowania przynajmniej kernel32 i musi wykonać szereg dodatkowych czynności księgowych, które należy wykonać, zanim proces zostanie uznany za pełnoprawny proces Win32. I nie zapominajmy o wszystkich dodatkowych obciążeniach wynikających z analizowania manifestów, sprawdzania, czy obraz wymaga podkładki zgodności, sprawdzania, czy obowiązują zasady ograniczeń oprogramowania, yada yada.
To powiedziawszy, widzę ogólne spowolnienie w sumie tych wszystkich drobiazgów, które należy zrobić, oprócz surowego tworzenia procesu, przestrzeni VA i początkowego wątku. Ale jak powiedziano na początku - ze względu na faworyzowanie wielowątkowości nad wielozadaniowością, jedynym oprogramowaniem, które jest poważnie dotknięte tym dodatkowym kosztem, jest słabo przeportowane oprogramowanie Unix. Chociaż sytuacja ta zmienia się, gdy oprogramowanie takie jak Chrome i IE8 nagle odkrywa na nowo zalety przetwarzania wieloprocesowego i zaczyna często uruchamiać i przerywać procesy ...