2.4 Watki
Spis tresci
-
Ogolne operacje na watkach:
pthread_create(),
pthread_attr_init (),
pthread_setschedparam(),
pthread_getschedparam(),
pthread_self(),
pthread_equal(),
pthread_exit(),
pthread_join(),
pthread_detach(),
pthread_once(),
pthread_atfork()
Wprowadzenie
Watek to sekwencyjny przeplyw sterowania. W wielowatkowym programie moze dzialac na raz wiele (jeden lub wiecej) watkow z tym, ze naprawde wspolbieznie pracuje nie wiecej niz liczba procesorow w systemie. Wszystkie dane poza stosem i rejestrami sa dzielone miedzy watkami, dlatego przelaczanie kontekstu pomiedzy jest tansze niz miedzy procesami. Na Linuxa dostepne sa dwa podstawowe rozwiazania implementacji watkow:
- Watki uzytkownika
(user-level – np. PThreads) istnieja, bez wspolpracy z jadrem systemu, w przestrzeni uzytkownika i nie sa rozroznialne (jako poszczegolne przebiegi) nigdzie indziej.
- Watki na poziomie jadra
(kernel-level – np. LinuxThreads) sa osobnymi unixowymi procesemi. Kazdy watek dzieli przestrzen adresowa z innymi watkami przez wywolanie clone()
(w implementacji LinuxThreads). Za przelaczanie kontekstu miedzy watkami odpowiedzialne jest jadro analogicznie do zarzadzania "normalnymi" procesami.
-
Bibliografia
- Biblioteka LinuxThreads (
http://pauillac.inria.fr/~xleroy/linuxthreads/)
- Biblioteka PCThreads (
http://www.aa.net/~mtp/PCthreads.html)
- Wyklad o watkach z seminarium "Systemy Rozproszone"
-
Autor:
Grzegorz Marczynski