2010-10-23 9 views
5

Mam pytanie dotyczące realizacji pthread na Linux.jak są pthreads na Linuksie postrzegane przez harmonogramu

Załóżmy, że proces ma 5 wątków. Teraz, w jaki sposób program planujący widzi te wątki (lub w ogóle nie widzi). np. Gdy wywoływany jest program planujący, wykonuje on tylko główny proces, , a następnie jego główny proces, który ma być zaplanowany między każdym z wątków.

Czy jest to inny sposób, że program planujący planuje każdy wątek tak, jakby był oddzielnym procesem.

Odpowiedz

7

W przypadku nowoczesnego systemu Linux (implementacja NPTL pthread) program planujący planuje wątki, wątek jest traktowany jako "proces lekki". pthread_create jest implementowany pod względem wywołania systemowego clone.

+0

W takim przypadku proces, w którym utworzono wątki, musi zostać przełączony w kontekście. Czy to prawda? –

+0

@Ganesh niekoniecznie. Nowy wątek może działać na innym rdzeniu. Ale tak, na danym rdzeniu przełączanie z jednego wątku na inny, czy w tym samym procesie, czy nie powoduje zmiany kontekstu. Przejście do wątku w tym samym procesie może być tańsze niż przejście do wątku w innym procesie, ponieważ może nie być konieczne unieważnienie tabeli stron itp. –

2

Linux planuje każdy wątek tak, jakby był procesem z zakresem jako PTHREAD_SCOPE_SYSTEM. Implementacja nptl może wykorzystywać wiele procesorów.

1

Jak powiedział Logan, każdy wątek jest zaplanowany niezależnie.

Jednakże, jeśli chcesz, możesz użyć grup kontrolnych procesu Linux, aby zaplanować grupy wątków.

Grupy sterowania procesem sprawiają, że planowanie jest nieco bardziej nieefektywne, ale może być znacznie bardziej sprawiedliwe.

Jednym z zastosowań, który stał się bardzo popularny, jest umieszczenie wszystkich procesów i wątków utworzonych przez każdy TTY w grupie kontrolnej na TTY. Powoduje to, że wszystkie aplikacje graficzne użytkownika są zaplanowane na tym samym poziomie co kompilacja jądra z 24 wątkami, którą uruchomił w oknie terminala. Aplikacje graficzne uzyskują 50%, a kompilacja dostaje 50%. Jeśli otworzy kolejne okno terminala i zacznie kompilować glibc z następnymi 24 wątkami, przesunie się do 33% aplikacji desktopowych, 33% kompilacji jądra i 33% kompilacji glibc.