Czy system operacyjny przydziela każdy proces osobnemu rdzeniu?

15

Ok znam klasyczny argument za unikaniem czterordzeniowych rdzeni. Na poziomie aplikacji większość aplikacji nie została napisana dla wielu rdzeni. Większość oprogramowania komputerowego nawet nie wymaga równoległości.

Jednak na poziomie systemu operacyjnego wydaje się oczywiste, że system operacyjny podzieliłby procesy na różne rdzenie. Czy nie byłby to sam w sobie argument za uzyskaniem większej liczby rdzeni? Czy to nie pomaga w wielu sytuacjach? Dostajesz kilka zadań intensywnie wykorzystujących procesor - te procesy mogą pochłaniać 100% rdzeni, ale nadal mogę przeglądać sieć i zadawać pytania na temat SuperUser na moim ostatnim rdzeniu ... prawda?

Doug T.
źródło
Podstawowym przepływem tego pytania i odpowiedzi jest założenie, że pojedynczy proces jest jednowątkowy. W wielu przypadkach tak nie jest. I nawet jeśli proces jest jednowątkowy, kilka bibliotek systemowych / dll dodaje własne wątki.
harrymc

Odpowiedzi:

12

System operacyjny nie może podzielić pojedynczego procesu jednowątkowego na wiele rdzeni (chociaż może zmienić rdzeń, na którym działa aplikacja, ale to inne pytanie), jednak może uruchomić wiele procesów, każdy na swoim rdzeniu. Tak więc, jeśli w tle działa wiele aplikacji intensywnie wykorzystujących procesor, prawdopodobnie nadal będziesz mieć zapasowy rdzeń, który będzie robił niewiele lub nic, czego możesz użyć do uruchomienia innych aplikacji.

ciężki
źródło
Kluczowym słowem jest tutaj, jeśli masz wiele aplikacji intensywnie wykorzystujących procesor - jest to rzadka sytuacja dla większości użytkowników.
Gilles „SO- przestań być zły”
Dzięki za odpowiedzi. Tak, ten drugi przypadek jest tym, co próbuję opisać.
Doug T.
3

Aby dodać do odpowiedzi @ heavyd, powodem tego jest to, że system operacyjny nie ma możliwości określenia, które części procesu mogą działać równolegle, a które nie. Jeśli program nie jest przeznaczony do działania na równoległych rdzeniach, możesz mieć w aplikacji procedury, które są zaprojektowane do uruchamiania sekwencyjnego w tym samym czasie. Może to powodować różnego rodzaju problemy (np. Jeśli 2 procedury używają tego samego bloku pamięci, ale nie są przeznaczone do uruchamiania w tym samym czasie).

System operacyjny może używać wielu rdzeni do wielu procesów, ponieważ i tak to robi, ale rozproszenie aplikacji z jednym rdzeniem na wiele rdzeni spowoduje różnego rodzaju nieoczekiwane zachowanie.

JNK
źródło
Dzięki. Rozumiem, że. Moje pytanie mogło być źle sformułowane. Chciałem zapytać o procesy nakładania systemu operacyjnego na osobne rdzenie. Nie w magiczny sposób tworzy pojedynczych wątków w procesach.
Doug T.
3

Jeśli chodzi o to, nie ma znaczenia, czy procesor jest obciążony w 1%, czy w 95% (o ile jest stabilny w 95% i nie osiąga maksimum), programy będą działały z tą samą prędkością, o ile nie uderza w 100%. Niewykorzystane cykle procesora są po prostu marnowane.

Z tego powodu system Windows 7 (na zgodnych procesorach) ma technologię znaną jako „parkowanie rdzenia”, która zasadniczo wyłącza nieużywane rdzenie w komputerze w celu oszczędzania energii elektrycznej.

Aplikacje jednowątkowe są automatycznie przenoszone na alternatywne rdzenie - nie jestem pewien co do technologii, ale wiem, że działa całkiem dobrze.

William Hilsum
źródło
2

Twoje początkowe sentymenty są poprawne - JEST negatywne nastawienie w kierunku wielu rdzeni i nie jest tak naprawdę na tyle zasłużone.

W czasach, gdy większość użytkowników używała komputera stacjonarnego do prostego edytowania tekstu, mogła istnieć sprzeczka. Ale w dzisiejszych czasach, takie jak przeglądarki z wieloma kartami, każda w swoim własnym procesie (chrome i tj. Separacja poziomu procesu dla kart) oraz takie rzeczy jak dekodery wideo na stronach internetowych i dodatkowe zadania, które można łatwo wyładować jak w locie renderowanie efektów, zwanych także css3, nawet sama przeglądarka może uzasadnić powód, dla którego jest o wiele więcej pamięci RAM i kilka rdzeni.

Dodaj do tego fakt, że niektórzy użytkownicy mogą również grać na tym komputerze lub korzystać z narzędzi takich jak garaż, imovie, hamulec ręczny, wiele rdzeni może być ogromną korzyścią.

Nie jest prawdą zakładanie, że musisz maksymalnie wykorzystać (tj. 100% zużycia procesora na jednym rdzeniu), aby inny rdzeń był przydatny. Ponieważ mówimy tutaj o równoległości. Przełączanie zadań w jednostce centralnej zwykle wykonuje partię operacji, zanim zamienia stos na inny proces. Nie wszystkie z tych zadań są powiązane z procesorem, więc nie zobaczysz wzrostu CPU, nawet jeśli rdzeń jest zablokowany.

Zasadniczo masz rację, ale jaka jest najskuteczniejsza liczba rdzeni? 2? 4? 12? Najprawdopodobniej będzie to zależeć od nawyków użytkowników ... Mam tendencję do tego 2-4 dla większości użytkowników, ale tylko zgaduję.

Obrabować
źródło