Czy proces z większą liczbą wątków w systemie Linux ma więcej czasu procesora niż proces z jednym wątkiem?Czy proces z większą ilością wątków na Linuksie miałby więcej czasu procesora niż proces z jednym wątkiem?
W procesach i wątkach Linuksa opisana jest przez strukturę zadań oraz scheduling is based on tasks. Znalazłem również this:
Kiedy nowy proces jest tworzony,
do_fork()
ustawia pole licznika zarówno prądu (rodzica) i P (dziecko) procesy w następujący sposób:current->counter >>= 1; p->counter = current->counter;
W inne słowa, liczba kleszczy pozostawionych rodzicowi podzielona jest na dwie połowy, jedną dla rodzica i drugą dla dziecka. Odbywa się to, aby uniemożliwić użytkownikom uzyskanie nieograniczonej ilości czasu procesora przy użyciu następującej metody: proces macierzysty tworzy proces potomny, który uruchamia ten sam kod, a następnie zabija się; przez odpowiednie dostosowanie szybkości tworzenia, proces potomny zawsze otrzymywałby nowy kwant przed wygaśnięciem kwantu jego rodzica. Ta sztuczka programowania nie działa, ponieważ jądro nie nagradza widełek. Podobnie, użytkownik nie może nękać niesprawiedliwego udziału procesora, uruchamiając wiele procesów w tle w powłoce lub otwierając wiele okien na graficznym pulpicie. Mówiąc ogólniej, proces nie może obciążać zasobów (chyba że ma przywileje, by dawać sobie politykę w czasie rzeczywistym) poprzez rozwidlenie wielu potomków.
Właściwie nie znalazłem tego w źródłach jądra, ale może to moja wina, może zobaczyłem niewłaściwą wersję jądra.
Ale co stanie się później, czy każdy wątek będzie uczestniczył w tworzeniu harmonogramów, jak w oddzielnym procesie? Czy proces z dziesięcioma wątkami otrzyma dziesięć razy więcej tyknięć niż proces z jednym wątkiem? Co z komunikacją w tym sensie?
Dziękuję za tak szczegółową odpowiedź! Czy to naprawia, że cgroups również w ten sposób ograniczają IO grup? – van
Tak, chociaż nie jestem pewien aktualnego stanu programów planujących operacje we/wy dla złożonych hierarchii, zobacz: http://lwn.net/Articles/427961/ – ninjalj
Próbuję zweryfikować twoje oświadczenie o cpu cgroups na sesję id . I jak mogłem zobaczyć, nie jest to prawda dla mojego laptopa Ubuntu 12.04 http://pastebin.com/0Fjp2BQy. Sytuacja na RedHat 6.3 jest jeszcze gorsza, wszystkie są przetwarzane w jednej grupie "/". Czy to jest specyficzne dla dystrybucji? Albo co robię źle? – van